2012-09-26 91 views
0

我有一個要求:一個文本框最多可以有50個字符,以實現這一點,我給了preventDefault。專注於文本框末尾的文本框

if (!(event.ctrlKey && (event.which == 65 || event.which == 86 || event.which == 67 || event.which == 88)) 
       && (!(event.shiftKey && (event.which == 35 || event.which == 36))) 
       && (key != 8 && key != 37 && key != 39 && key != 46 && key != 36 && key != 35 && key != 33 && key != 34)) { 
        event.preventDefault(); 
       } 

但現在的要求是:當我們按ctrl + a然後abc它應該erace一切從文本和打印abc。
實現這一點,我寫了這個代碼 - >

var focusItem = $('<input type="text">'); 
    function getSelText() { 
       var txt = ''; 
       //IE 
     var focusItem = $('<input type="text">'); 
     if (document.selection != undefined) { 
      focusItem.focus(); 
      var sel = document.selection.createRange(); 
      var rangeParent = sel.parentElement(); 
      txt = sel.text; 
      if (!(event.ctrlKey && (event.which == 65 || event.which == 86 || event.which == 67 || event.which == 88)) 
      && (!(event.shiftKey && (event.which == 35 || event.which == 36))) 
      && (key != 8 && key != 37 && key != 39 && key != 46 && key != 36 && key != 35 && key != 33 && key != 34)) { 
      //event.preventDefault(); 
      if (txt.length > 0 && ((key >= 65 && key <= 90) || (key >= 48 && key <= 57) || (key >= 97 && key <= 122))) { 
       sel.text = String.fromCharCode(key).toLowerCase(); 
       } 
       txt = sel.text; 
      } 
      }       
      return txt; 
     } 

現在一切正常,但..當我按Ctrl + A ABC那麼它得到打印爲BCA。發生什麼事情是:當我按ctrl + a後,然後a被打印在文本框中,但重點是在文本之前設置,這是一個。
如何處理這個。
我使用的是Windows 7,IE9,visual studio 2010.
謝謝。

回答

0

將焦點設置到一個文本框末端的最簡單的方法是隻文本框的文本設置爲本身:

focusItem.val(focusItem.val()); 
+0

我試圖檢查focusItem的價值'如果(txt.length> 0 &&((key> = 65 && key <= 90)||(key> = 48 && key <= 57)||(key> = 97 && key <= 122))){ sel.text = String.fromCharCode (鍵).toLowerCase(); } txt = sel.text; } '但它返回null。 –

+0

如果你的文本框有一個'myTextBox'的id,那麼執行'$('#myTextBox').val($('#myTextBox').val())'會把光標放在最後。您只需要獲取文本框的值,不需要嘗試爲該部分創建選擇範圍。 – Bill

+0

它不工作:( –