2009-01-26 29 views
10

Đây là một câu hỏi followup cho câu hỏi này:Plugin đầu vào được che dấu của jQuery. chọn tất cả các nội dung khi textbox nhận tập trung

select all contents of textbox when it receives focus (Javascript or jQuery)

Về cơ bản tôi đang sử dụng một hộp kết hợp với jQuery masked input plugin (Edit: Link có thể điểm không còn ở phiên bản có liên quan)

Khi hộp nhập đầu vào được lấy tiêu điểm, tôi muốn chọn tất cả nội dung của hộp văn bản đó, nhưng dường như có plugin này được liên kết với hộp văn bản ngăn điều đó. Tôi chỉ tự hỏi liệu có một cách nào đó quanh đây không.

Dưới đây là một trang mẫu .html đó chứng tỏ vấn đề:

<html> 
<head> 
    <title></title> 
</head> 
<body> 
    <input id="masktest" type="text" value="01/01/2009" /> 
    <br /> 
    <input id="focustest" type="text" value="on focus will select all contents..." /> 

    <script type="text/javascript" src="http://code.jquery.com/jquery-latest.min.js"></script> 
    <script type="text/javascript" src="http://jquery-joshbush.googlecode.com/files/jquery.maskedinput-1.2.1.pack.js"></script> 
    <script type="text/javascript"> 
     $(function() { 
      $("#masktest").mask("99/99/9999"); 

      // Contents of textboxes will be selected when receiving focus. 
      $("input[type=text]") 
       .focus(function() { 
        $(this).select(); 
       }); 
     }); 
    </script> 
</body> 
</html> 

Trả lời

7

Tôi là tác giả của số Masked Input Plugin cho jQuery. Tôi quyết định rằng đây sẽ là hành vi mặc định cho các mặt nạ đã hoàn thành và tôi nhận được nó vào bản phát hành mới nhất. Bạn có thể đọc chi tiết here

+0

Plugin của bạn có hỗ trợ tiền mặt không? như $ 3,439,44 –

3

Hey Jon, không quá chắc chắn về việc thực hiện điều này, nhưng điều này sẽ làm việc:

$(function() { 


     // Contents of textboxes will be selected when receiving focus. 
     $("input[type=text]") 
      .focus(function() { 
       var mask = "99/99/9999"; 
       $(this).unmask(mask).select().mask(mask); 
      }); 
    }); 
3

của nó làm việc cho tôi trong FF3.

$("input[type=text]").focus(function(e) { 
    var that = this; 
    setTimeout(function(){$(that).select();},10); 
    return false; 
}); 

setTimeout sẽ "đợi" các lựa chọn() thực hiện, tôi đã tự hỏi về: - chức năng mặt nạ Ok làm công việc của bạn sau đó tôi sẽ chọn nội dung. Rằng THEN là nơi hàng đợi là hữu ích.

Chỉ là một ý tưởng. Tôi hy vọng nó hoạt động như mong đợi.

+0

nó hoạt động (trong IE7)! cũng rất tiện dụng để biết, tôi có thể thấy điều này có khả năng hữu ích trong các trường hợp tương tự khác có thể xảy ra. –

+0

Tôi không thể có được giải pháp này để làm việc với setTimeout ... nhưng bằng cách làm $ ("body") animate ({opacity: 1.0}, 10, function() {$ (that) .select();}); nó hoạt động tốt – Birk

1

Vấn đề

defaut giá trị được xóa khi tập trung

Giải quyết: thêm ít mã vá để mask.js file (jquery.maskedinput-1.2.2 .min.js)

(function(a){var c=(a.browser.msie?"paste":"input")+".mask";var b=(window.orientation!=undefined);a.mask={definitions:{"9":"[0-9]",a:"[A-Za-z]","*":"[A-Za-z0-9]"}};a.fn.extend({caret:function(e,f){if(this.length==0){return}if(typeof e=="number"){f=(typeof f=="number")?f:e;return this.each(function(){if(this.setSelectionRange){this.focus();this.setSelectionRange(e,f)}else{if(this.createTextRange){var g=this.createTextRange();g.collapse(true);g.moveEnd("character",f);g.moveStart("character",e);g.select()}}})}else{if(this[0].setSelectionRange){e=this[0].selectionStart;f=this[0].selectionEnd}else{if(document.selection&&document.selection.createRange){var d=document.selection.createRange();e=0-d.duplicate().moveStart("character",-100000);f=e+d.text.length}}return{begin:e,end:f}}},unmask:function(){return this.trigger("unmask")},mask:function(j,d){if(!j&&this.length>0){var f=a(this[0]);var g=f.data("tests");return a.map(f.data("buffer"),function(l,m){return g[m]?l:null}).join("")}d=a.extend({placeholder:"_",completed:null},d);var k=a.mask.definitions;var g=[];var e=j.length;var i=null;var h=j.length;a.each(j.split(""),function(m,l){if(l=="?"){h--;e=m}else{if(k[l]){g.push(new RegExp(k[l]));if(i==null){i=g.length-1}}else{g.push(null)}}});return this.each(function(){var ORJ=$(this).val();var r=a(this);var m=a.map(j.split(""),function(x,y){if(x!="?"){return k[x]?d.placeholder:x}});var n=false;var q=r.val();r.data("buffer",m).data("tests",g);function v(x){while(++x<=h&&!g[x]){}return x}function t(x){while(!g[x]&&--x>=0){}for(var y=x;y<h;y++){if(g[y]){m[y]=d.placeholder;var z=v(y);if(z<h&&g[y].test(m[z])){m[y]=m[z]}else{break}}}s();r.caret(Math.max(i,x))}function u(y){for(var A=y,z=d.placeholder;A<h;A++){if(g[A]){var B=v(A);var x=m[A];m[A]=z;if(B<h&&g[B].test(x)){z=x}else{break}}}}function l(y){var x=a(this).caret();var z=y.keyCode;n=(z<16||(z>16&&z<32)||(z>32&&z<41));if((x.begin-x.end)!=0&&(!n||z==8||z==46)){w(x.begin,x.end)}if(z==8||z==46||(b&&z==127)){t(x.begin+(z==46?0:-1));return false}else{if(z==27){r.val(q);r.caret(0,p());return false}}}function o(B){if(n){n=false;return(B.keyCode==8)?false:null}B=B||window.event;var C=B.charCode||B.keyCode||B.which;var z=a(this).caret();if(B.ctrlKey||B.altKey||B.metaKey){return true}else{if((C>=32&&C<=125)||C>186){var x=v(z.begin-1);if(x<h){var A=String.fromCharCode(C);if(g[x].test(A)){u(x);m[x]=A;s();var y=v(x);a(this).caret(y);if(d.completed&&y==h){d.completed.call(r)}}}}}return false}function w(x,y){for(var z=x;z<y&&z<h;z++){if(g[z]){m[z]=d.placeholder}}}function s(){return r.val(m.join("")).val()}function p(y){var z=r.val();var C=-1;for(var B=0,x=0;B<h;B++){if(g[B]){m[B]=d.placeholder;while(x++<z.length){var A=z.charAt(x-1);if(g[B].test(A)){m[B]=A;C=B;break}}if(x>z.length){break}}else{if(m[B]==z[x]&&B!=e){x++;C=B}}}if(!y&&C+1<e){r.val(ORJ);w(ORJ.length,h)}else{if(y||C+1>=e){s();if(!y){r.val(r.val().substring(0,C+1))}}}return(e?B:i)}if(!r.attr("readonly")){r.one("unmask",function(){r.unbind(".mask").removeData("buffer").removeData("tests")}).bind("focus.mask",function(){q=r.val();var x=p();s();setTimeout(function(){if(x==j.length){r.caret(0,x)}else{r.caret(x)}},0)}).bind("blur.mask",function(){p();if(r.val()!=q){r.change()}}).bind("keydown.mask",l).bind("keypress.mask",o).bind(c,function(){setTimeout(function(){r.caret(p(true))},0)})}p()})}})})(jQuery); 
0

nếu chức năng 'hoàn thành' của bạn không hoạt động, hãy cố gắng thay thế dòng này:

if (settings.completed && next == len)

(đây là dòng số 169 của plugin noncompressed) với điều đó:

if (settings.completed && eval(+next - 1) == len)

Trong khi sử dụng này plugin với firebug, tôi đã nhận thấy, biến 'tiếp theo' nhảy lên trên một biểu tượng khi char cuối cùng của mặt nạ nhập vào. Cách này sẽ hoạt động.

0

Tôi đã tìm thấy giải pháp tốt hơn so với thời gian chờ.

Bạn có thể xem jquery.maskedinput.js: 293 có một chức năng cho tập trung đầu vào và nó được kích hoạt chỉ trên đầu vào mà không "readonly" thuộc tính như vậy:

$("input[type=text]").attr("readonly", true).select().removeAttr("readonly");

... chỉ cần như thế. Hoạt động như một sự quyến rũ;)

Các vấn đề liên quan