2016-05-07 56 views
0

我已經使用jQuery的如下功能,防止用戶進入特定按鍵,如何防止用戶在Chrome中輸入特定的鍵?

$('#prod_name_en').keypress(function (e) { 
if (e.key.match(/[[email protected]#]+/)) 
    { 
     e.preventDefault(); 
    } 
}); 

它是工作在Mozilla罰款,但不是在鉻。

它拋出以下錯誤,

Uncaught TypeError: Cannot read property 'match' of undefined

請幫助我如何解決這個問題。

+0

看看https://bugs.jquery.com/ticket/15220 –

+0

_「這是工作在Mozilla罰款,但不chrome。「_你在哪個版本的Chrome上試過'js'? – guest271314

+0

chrom版本是50.0.2661.94 m –

回答

1

不要依賴於JQuery的鍵盤事件關鍵財產。它可能無法按我們的預期工作。
有兩種不同類型的代碼:鍵盤代碼(代表用戶按下鍵盤上的鍵的數字)和字符代碼(代表Unicode字符的數字)。 IE只將字符代碼存儲在keyCode中,而其他所有瀏覽器都將其存儲在which中。一些(但不是全部)瀏覽器也將其存儲在charCode和/或keyCode中。
要獲得字符值 - 通過String.formCharCode方法使用的字符代碼:

$('#prod_name_en').on('keypress', function(e){ 
    var keyCode = e.keyCode || e.charCode || e.which; // cross-browser key-code detection 
    if (String.fromCharCode(keyCode).match(/[[email protected]#]+/)) e.preventDefault(); 
}); 
+0

你能解釋一下,它真的在做什麼? –

+0

我的意思是爲什麼不直接在fromcharcode函數中使用e.keycode? –

+0

@ MujahedAKAS,請參閱添加說明 – RomanPerekhrest

0
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.2/jquery.min.js"></script> 

<script> 

$(document).ready(function(){ 


     $('#prod_name_en').keypress(function (e) { 

      // 97 code for a and 98 for b 

      if(e.keyCode==97 || e.keyCode==98) 
       e.preventDefault(); 

     }); 
    }); 

</script> 

<input type="text" id="prod_name_en"> 
0

可能的解決方法使用String.prototype.slice()input事件,event.target.value

$("#prod_name_en").on("input", function(e) { 
 
    var value = e.target.value; 
 
    if (value.slice(-1).match(/[[email protected]#]+/g)) { 
 
    e.target.value = value.slice(0, -1); 
 
    e.preventDefault(); 
 
    } 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"> 
 
</script> 
 
<input type="text" id="prod_name_en" value="" />

的jsfiddle https://jsfiddle.net/4rmsjctf/1/

+0

如果我們繼續按住shift鍵並輸入!並點擊進入其他輸入字段!遺蹟。 –

+0

@ MujahedAKAS _「如果我們繼續按住shift鍵並輸入!並點擊進入其他輸入字段而不是!」_無法重現所描述的效果。 – guest271314

相關問題