2014-01-23 18 views
4

防止用户我想防止用户输入<或>到使用JavaScript我的表单字段。这是我到目前为止:进入< or >到表单字段

$(document).on('keydown', function (e) { 
    regex = new RegExp("\<|>"); 
    var key = String.fromCharCode(!event.charCode ? event.which : event.charCode); 
    if (!regex.test(key)) { 
     event.preventDefault(); 
     return false; 
    } 
}); 

它仍然允许这些字符,我该如何阻止?

+5

您使用E对于事件处理程序,以便使用e.preventDefault()不event.preventDefault(); – Peace

+0

你不会在keydown事件中获得最后一个输入的字符。试试看。为什么在preventDefault()之后返回false? – Johan

+2

只是提醒也在服务器端验证这一点。仅仅因为你用JS限制它并不意味着这不能被绕过。 – Mark

回答

5

为什么要翻译然后regexing?我喜欢保持简单:

$(document).on('keypress', function (e) { 
    if ((e.which == 62) || (e.which == 60)) { // greater than or less than key pressed 
     e.preventDefault(); 
    }  
}); 

编辑补充:

备用如果基于@Samsquanch反馈条件:

if ((String.fromCharCode(e.which) == '>') || (String.fromCharCode(e.which) == '<')) { // greater than or less than key pressed 
+0

太棒了!谢谢! –

+2

应该指出,这不适用于跨浏览器和/或跨OS。例如,它对我不起作用,因为'<返回188并且'>'键返回190. – Samsquanch

+0

@Samsquanch添加了备用条件;这会更普遍吗? –

3

两件事情值得注意:

  • 按键并非完全支持所有浏览器中的所有密钥。您应该使用的keydown或KEYUP
  • <>键码跨OS”和键盘布局有所不同。硬编码键码将无法工作始终

对于跨操作系统和跨键盘布局的解决方案(虽然不是干净的),你可以这样做:

$(document).on('keyup', 'input, textarea', function (e) { 
    regex = new RegExp("\<|>"); 
    var val = $(this).val(); 
    $(this).val(val.replace(regex, '')); 
}); 

这条的<>按键来自输入的按键。用户会看到发生这种情况,但它应该始终抓住所需的键并将其去除。

相关问题