2 <script type="text/javascript" src="<%$p%>elements/masked_input_1.1.js">
6 <& /elements/tr-input-text.html, id => $id, @_ &>
7 <script type="text/javascript">
8 <&| /elements/onload.js &>
10 elm: document.getElementById('<%$id%>'),
11 format: '<% $opt{format} %>',
12 <% $opt{allowed} ? "allowed: '$opt{allowed}'," : '' %>
13 <% $opt{typeon} ? "typeon: '$opt{typeon}'," : '' %>
15 document.getElementById('<%$id%>').value = <% $value |js_string %>;
16 % if ( $clipboard_hack ) {
17 var t = document.getElementById('<% $id %>');
18 var container = document.getElementById('<%$id%>_clipboard');
19 var KeyHandlerDown = t.onkeydown
20 t.onkeydown = function(e) {
21 // intercept ctrl-c and ctrl-x
22 // and cmd-c and cmd-x on mac
23 // when text is selected
24 if ( ( e.ctrlKey || e.metaKey ) ) {
26 var separators = /[\\/:-]/g;
27 var s = t.value.substr(t.selectionStart, t.selectionEnd);
29 container.value = s.replace(separators, '');
30 container.previous = t;
36 return KeyHandlerDown.call(t, e);
38 container.onkeyup = function(e) {
39 if ( container.previous ) {
40 setTimeout(function() {
41 container.previous.value = container.value;
42 container.previous.focus();
50 <textarea id="<%$id%>_clipboard" style="opacity:0"></textarea>
57 my $id = $opt{id} || sprintf('input%04d',int(rand(10000)));
58 my $value = length($opt{curr_value}) ? $opt{curr_value} : $opt{value} || '';
60 my $clipboard_hack = $FS::CurrentUser::CurrentUser->option('enable_mask_clipboard_hack');
63 Set up a text input field with input masking.
65 <& /elements/tr-input-mask.html,
66 format => '____-__-__',
67 #typeon => '_YMDhms', # which characters in the format represent blanks
68 #allowed => '0123456789', # characters allowed in the blanks
69 ... all other options as for tr-input-text.html
72 Note that the value sent on form submission will contain the mask
73 separators, and if value/curr_value is passed, it should also be
74 formatted to fit the mask.
76 Uses masked_input_1.1.js by Kendall Conrad, available under a Creative Commons
77 Attribution-ShareAlike license.