【问题标题】:Disallow typing of few of characters e.g.'<', '>' in all input textboxes using jquery禁止使用 jquery 在所有输入文本框中输入少量字符,例如“<”、“>”
【发布时间】:2010-06-16 13:14:53
【问题描述】:

我如何做到这一点:-
当用户键入'abcd' 之类的字符,然后键入'&gt;'(我的应用程序的无效字符)时,我想将文本设置回'abcd'。如果我们可以像在 winforms 应用程序中那样取消输入本身,那就更好了。这应该在用户键入而不是单击按钮时发生。

我希望将其应用于我网页中的所有文本框。如果解决方案是基于 jQuery 的,这将很容易。可能会像这样开始。
$("input[type='text']")

解决方案
我使用了@jAndy 和@Iacopo 提供的两个答案(抱歉,无法标记为两者的答案),如下所示。

$(document).ready(function() {
  //makes sure that user cannot enter < or > sign in text boxes.
  $("input:text").keyup(purgeInvalidChars)
      .blur(purgeInvalidChars)
      .bind('keypress', function(event) {
        if (event.which === 62 || event.which === 60)
          return (false);
      });
  function purgeInvalidChars() {
    if (this.value != this.value.replace(/[<>]/g, '')) {
      this.value = this.value.replace(/[<>]/g, '');
    }
  }
});

虽然仍然存在一个问题,即它不允许用户在文本框中选择文本,而且这只发生在 chrome 上,但在 IE 上工作正常(第一次:D),未在 Firefox 上测试。如果有人能找到解决方案或希望谷歌的人能解决它,我会很高兴:D。

更新
我通过if (this.value != this.value.replace(/[&lt;&gt;]/g, ''))检查解决了它。还更新了解决方案。

再次感谢所有回答者。

【问题讨论】:

  • 希望您已经意识到这一点,但请注意,客户端验证不会阻止用户使用“>”提交输入,因此您仍然需要在服务器端执行输入验证。
  • 感谢大脑! ASP.NET 负责处理它。它会引发危险的输入异常,对我来说它将重定向到自定义错误页面。
  • 请记住,用户端输入验证永远不够。您应该始终在服务器端验证输入。

标签: asp.net javascript jquery webforms


【解决方案1】:

您应该捕获 'keyup' 和 'blur' 事件并将它们附加到一个完善输入的函数:不要忘记用户可以粘贴无效的字符序列。

例如

$('input[type="text"]').keyup(purgeInvalidChars).blur(purgeInvalidChars)

function purgeInvalidChars()
{
   this.value = this.value.replace(/[<>]/g, ''); 
} 

你肯定会改进正则表达式,可能会替换除启用字符之外的所有字符。

抱歉,我无法测试我的代码,所以你应该接受它cum grano salis :-)

【讨论】:

  • @lacopo - 这是可行的,只是你应该将g 全局标识符添加到正则表达式中,以防有人使用多个无效字符进行复制/粘贴。
  • 感谢您指出粘贴问题。我完全错过了这工作,但用户无法选择文本框中的文本。可以为此做些什么吗?
  • 是的,如果event.which 不是真实字符(即它是箭头或Home 等),您应该避免替换文本
【解决方案2】:

示例(按键):

$(document).ready(function(){
    $('input:text').bind('keypress', function(event){

    if(event.which === 62 || event.which === 60)
       return(false);
    });
});​

示例(按键):

$(document).ready(function(){
  $('input:text').bind('keydown', function(event){
    if(event.which === 226)
       return(false);
  });
});​

只需将preventDefaultstopPropagation 函数用于事件。这些是通过在事件处理程序中返回 (false) 来触发的。

在这个例子中,我只检查了&lt;&gt; 的键码,幸好它们在同一个键上。如果我们点击该代码,我们只会阻止默认行为。

参考.preventDefault().stopPropagation()

【讨论】:

  • 不确定您在测试什么,但这在 Windows 机器上根本不起作用, 的键码是 190。另外,我用的浏览器是chrome。
  • @ryanulit:在 chrome 上使用 winXP。 keydown 对我来说是 226,whichkeyCode。没有理由对此投反对票。
  • 这也不起作用我可以输入&lt;&gt; 字符。我用的是win7
  • @Ismail:尝试按键变体
  • Keypress 变体完美运行。 :)。非常感谢@jAndy
【解决方案3】:
$('#textBox').keyup(function(e){
            var myText = $('#textBox').val(); 
            myText =  myText.replace(">", "");
            myText =  myText.replace("<", "");
            $('#textBox').val(myText);
        });

-- 更新--

keyup 而不是keypress

【讨论】:

  • 我不知道为什么这会被否决。这不是最有效的实现,但它是一个正确的解决方案。
  • 我看到了这个问题。您需要将其更改为 keyup 而不是 keypress
猜你喜欢
  • 2015-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多