2013-08-06 137 views
0

我有拒绝任何字符,除了数字一个一个JavaScript函数:力数值只js函数无法在Firefox,但在Chrome浏览器和IE浏览器工作正常

$(".number").keypress(this.EnsureNumbers); 

EnsureNumbers: function (event) { 
    var value = $(this).first().val(); 

    value = value.substring(0, $(this)[0].selectionStart) + String.fromCharCode(event.keyCode) + value.substring($(this)[0].selectionEnd); 
    if (!value.match(/^\d+$/)) { 
     event.preventDefault(); 
    } 
} 

此功能允许用户(如果使用了镀铬/ IE)选择数字的任何部分(使用SHIFT键)并更改选定的数字/字母。

但在Firefox中,此方法不允许我按退格键或使用左/右键。

再次,在Chrome和IE(甚至IE8)工作正常。有谁知道是Direfox中的一个错误?或者它来自我?

我的Firefox 22

例子,看看在:http://jsfiddle.net/TR8t4/

+0

即时将关键代码转换为字符串,即使它是特殊字符(如Backspace或箭头),然后检查它是否为数字。你应该只打印字符。 – Barmar

+0

为什么在Chrome浏览器甚至IE浏览器上都可以使用?我现在使用Safari和Opera进行测试,并使用上述代码完美工作。 –

+1

event.which http://api.jquery.com/event.which/ –

回答

0

正如@Barmar所说,这是Mozilla FF中的错误行为。

曾经我也遇到过这样的问题。但我解决了通过检测浏览器像$.browser.mozilla。虽然现在已经在最新版本的jQuery中折旧了。

我所做的是在这里

$('selector').keypress(function(event){    
       if($.browser.mozilla == true){      
         if (event.keyCode == 8 || event.keyCode == 37 || event.keyCode == 39 || event.keyCode == 9 || event.keyCode == 16 || event.keyCode == 46){ 
          return true; 
         } 
       } 
       if (event.which < 48 || event.which > 57) {      
        event.preventDefault();      
        } 
      }); 

JSFiddle,供大家参考。

0

是的,这是在Firefox中的错误。当您使用编辑和箭头键时,它会触发keypress事件。这些键应该触发​​,但不是keypress

此不正确的行为在QuirksMode的兼容性列表中列出。

+0

我现在用'which'而不是'keyCode',但我仍然不能使用退格或删除,甚至使用'keydown'事件 –

+0

为什么你认为这会有所帮助?问题不在于解码密钥,问题在于当按下这些按键时事件不应该触发。 – Barmar

相关问题