2010-04-01 14 views
1

我有一個文本框我用作計時器顯示「hh:mm:ss」當我選擇框並按數字時,它將數字插入光標位置,但不是替換該位置的數值,它會將所有現有值轉移。例如,計時器文本框顯示「01:00:35」,我用1替換第一個分鐘位置,計時器文本框將顯示爲「01:10:03」。如何在將按鍵輸入到jQuery Masked Input時將現有值保持右移?

任何人都知道如何強制文本框替換,而不是插入,在光標位置?

我試過攔截onKeyPress,手動進行替換,重寫整個計時器文本,然後返回false。但是,這不適用於jQuery屏蔽輸入,因爲我的函數首先運行。

回答

1

看起來像這是蒙面輸入插件的一個功能。您可以嘗試修改插件,方法是更換以下方法,然後在調用它時將noshift選項設置爲true(警告我對此進行了最低限度的測試,但似乎可行) - $('#showTime')。mask ( 「99:99:99」,{noshift:真});

function shiftL(pos) { 
     if(!settings.noshift){ 
     while (!tests[pos] && --pos >= 0); 
     for (var i = pos; i < len; i++) { 
      if (tests[i]) { 
      buffer[i] = settings.placeholder; 
      var j = seekNext(i); 
      if (j < len && tests[i].test(buffer[j])) { 
       buffer[i] = buffer[j]; 
      } else 
       break; 
      } 
     } 
     } 
     writeBuffer(); 
     input.caret(Math.max(firstNonMaskPos, pos)); 
    }; 

    function keypressEvent(e) { 
     if (ignore) { 
     ignore = false; 
     //Fixes Mac FF bug on backspace 
     return (e.keyCode == 8) ? false : null; 
     } 
     e = e || window.event; 
     var k = e.charCode || e.keyCode || e.which; 
     var pos = $(this).caret(); 

     if (e.ctrlKey || e.altKey || e.metaKey) {//Ignore 
     return true; 
     } else if ((k >= 32 && k <= 125) || k > 186) {//typeable characters 
     var p = seekNext(pos.begin - 1); 
     if (p < len) { 
      var c = String.fromCharCode(k); 
      if (tests[p].test(c)) { 
      if(!settings.noshift) shiftR(p); 
      buffer[p] = c; 
      writeBuffer(); 
      var next = seekNext(p); 
      $(this).caret(next); 
      if (settings.completed && next == len) 
       settings.completed.call(input); 
      } 
     } 
     } 
     return false; 
    }; 
+0

謝謝,這個伎倆! – Andrew 2010-04-01 17:59:45

相關問題