2012-12-27 130 views
3

我建立一個終端仿真運行了一個問題,與在Firefox中捕捉退格。我能夠抓住第一個退格鍵並在提示符處移除輸入中的最後一個字符,但它不會持續並移除多個字符。火狐的keydown退格鍵的問題

實際的網站:http://term.qt.io/

複製在這裏:http://jsfiddle.net/BgtsE/1/

JavaScript代碼

function handleKeys(e){ 
    var evt = e || window.event; 
    var key = evt.charCode || evt.keyCode; 
    if(evt.type == "keydown") 
    { 
     curr_key = key; 
     if(key == 8) 
     { 
      evt.preventDefault(); 
      if(0 < $('body').text().length) 
       $('body').text($('body').text().slice(0,-1)); 
     } 
    } 
    else if(evt.type == "keypress") 
    { 
     if(97 <= key && key <= 122) 
     { 
      if(curr_key != key) 
       $('body').append(String.fromCharCode(key)); 
     } 
     else 
      $('body').append(String.fromCharCode(key)); 
    } 
} 
$(function(){ 
    $('html').live({ 
     keydown:function(e){ 
      handleKeys(e); 
     }, 
     keypress:function(e){ 
      handleKeys(e); 
     } 
    }) 
})​ 
+0

僅供參考,'活()'被棄用的jQuery 1.7。你應該使用'bind()'或'on()'。 – Barmar

+0

你的小提琴適合我。 backspace自動重複可能取決於操作系統或瀏覽器。我正在使用OS X Snow Leopard和Chrome 24. – Barmar

+1

在Windows 17.0.1上使用Firefox時出現了一些問題。我將發佈更詳細的「答案」,但它看起來像某種錯誤 – HMR

回答

5

試試這個:http://jsfiddle.net/NBZG8/1/

你需要在這兩個KeyDown和按鍵來處理退格支持Chrome和Firefox

function handleKeys(e){ 
    var evt = e || window.event; 
    var key = evt.charCode || evt.keyCode; 

    if (evt.type == "keydown") { 
     curr_key = key; 
     if(key == 8 && !$.browser.mozilla) { 
      backspaceHandler(evt); 
     } 
    } else if (evt.type == "keypress") { 
     if (key == 8) { 
      backspaceHandler(evt); 
     } else if (97 <= key && key <= 122) { 
      if(curr_key != key) { 
       $('body').append(String.fromCharCode(key)); 
      } 
     } else { 
      $('body').append(String.fromCharCode(key)); 
     } 
    } 
} 

function backspaceHandler(evt) { 
    evt.preventDefault(); 
    if(0 < $('body').text().length) { 
     $('body').text($('body').text().slice(0,-1)); 
    } 
}; 

$(function(){ 
    $('html').live({ 
     keydown : handleKeys, 
     keypress : handleKeys 
    }) 
})​ 
+0

愛它,謝謝。 –

+0

哇,真棒@snjoetw –

0

在Firefox窗口17.0.1由$返回的值(「選擇」)。文本()有追加到末尾添加的新行字符。所以串並沒有爲我工作:

<html> 
    <head> 
     <title>test</title> 
     <script src="jquery.js"></script> 
     <script> 
      $("document").ready(function(){ 
       console.log("body text seems to have a new line character"); 
       console.log(($('body').text()[5]=="\n")); 
      }); 

      function handleKeys(e){ 
       var evt = e || window.event; 
       var key = evt.charCode || evt.keyCode; 
       if(evt.type == "keydown") 
       { 
        curr_key = key; 
        if(key == 8) 
        { 
         evt.preventDefault(); 
         if(0 < $('body').text().length) 
          // next line works, you might trim the \n if it's there at the end 
          //$('body').text($('body').text().slice(0,-2)); 
          // this one didn't work for me 
          $('body').text($('body').text().substring(0,$('body').text().length-1)); 
        } 
       } 
       else if(evt.type == "keypress") 
       { 
        if(97 <= key && key <= 122) 
        { 
         if(curr_key != key) 
          $('body').append(String.fromCharCode(key)); 
        } 
        else 
         $('body').append(String.fromCharCode(key)); 
       } 
      } 
      $(function(){ 
       $('html').live({ 
        keydown:function(e){ 
         handleKeys(e); 
        }, 
        keypress:function(e){ 
         handleKeys(e); 
        } 
       }) 
      }) 
     </script> 
    </head> 
    <body>12345</body> 
</html> 
0

我曾與Mozilla的按鍵同樣的問題。 感謝這個主題,它解決了我的問題,所以我會發布我的代碼,如果有人試圖做我和我一樣的事情。
在我爲例我嘗試自動空間,當用戶鍵入兩個數字,並沒有工作在Firefox所以這是我的代碼:

$(function() { 

    $('#field1, #field2').on('keypress',function(event) { 
     event = event || window.event; 
     var charCode = event.keyCode || event.which, 
      lgstring = $(this).val().length, 
      trimstring; 
     if(charCode === 8) { 
      event.returnValue = false; 
      if(event.preventDefault) 
       event.preventDefault(); 
      if(0 < $(this).val().length) { 
       $(this).val($(this).val().slice(0,-1)); 
      } 
     } 
     else if(((charCode > 31) && (charCode < 48 || charCode > 57)) || lgstring >= 14) { 
      event.returnValue = false; 
      if(event.preventDefault) 
       event.preventDefault(); 
     } 
     else { 
      trimstring = $(this).val().replace(/ /g,""); 
      if((lgstring !== 0) && (trimstring.length % 2) === 0) { 
       $(this).val($(this).val() + ' '); 
      } 
     } 
    }); 

}); 

我注意到,Mozilla的處理退格作爲一個按鍵,其中Chrome不會。

對不起,我的英語我是法國人

0
$('#id').keypress(function(e) { 

if(e.charCode > 0 || e.keyCode === 8){ 
if(e.keyCode === 8){ 
    return true; 
}else if((e.charCode !== 0) && ((e.charCode > 57 && e.charCode < 65)){ 
    return false; 
    } 
}else if((e.keyCode !== 0) && ((e.keyCode > 57 && e.keyCode < 65)){ 
    return false; 
} 
});