javascript阻止textarea中的特殊字符

时间:2016-03-16 18:39:24

标签: javascript jquery

我需要在textarea中限制以下特殊字符<>{}的使用。我正在使用这个用于jQuery的字母数字插件(https://github.com/KevinSheedy/jquery.alphanum)。

我的脚本如下:

$(document).on('keyup', '#ta_0', function(e){
    blacklisted_characters = $('#ta_0').alphanum({ disallow : '<>{}' }); // Specify characters to disallow
    if (blacklisted_characters) {
        if (!!$.prototype.fancybox)
            $.fancybox.open([
                {
                    type: 'inline',
                    autoScale: true,
                    minHeight: 30,
                    content: '<p class="fancybox-error">' + 'Désolé, l\'utilisation de ce caractère n\'est pas autorisée.' + '</p>'
                }],
                {
                    padding: 0
                });
        else
            alert('Désolé, l\'utilisation de ce caractère n\'est pas autorisée.');
    };

});

如果在textarea中写入了这些特殊字符,则应显示弹出窗口。但我认为我的代码中存在错误,因为它阻止我在textarea中添加文本并且每次都弹出错误消息。

该插件仅适用于此:

$('#ta_0').alphanum({ 
    disallow           : '<>{}' 
});

我做错了是if条件。我的textarea的id是$ta_0。我只需要创建一个if条件,以确定是否在textarea <>{}中写入了以下字符。如果这些字符写在textarea中,它应该激活错误弹出窗口。

非常感谢任何帮助。

谢谢

2 个答案:

答案 0 :(得分:0)

函数:$('#ta_0').alphanum({ disallow : '<>{}' });不会将输入字符作为值返回,它返回使用jQuery选择器选择的输入数组,在本例中为#ta_0。由于这些输入存在于您的页面上,因此它将始终返回true,这会导致弹出窗口继续运行。

您必须通过几种方式重新构建代码。

  1. $('#ta_0').alphanum({ disallow : '<>{}' });移到关键字功能
  2. 之外
  3. 找到列入黑名单的输入的密钥代码(&lt;&gt; {})
  4. 根据这些密钥代码检查您的密钥更改功能中的事件(在本例中为e),以决定是否显示fancybox。
  5. 澄清第3步:使用keyup看起来很难做到这一点,因为所有字符都需要 Shift 键作为修饰符。但是使用keypress,您可以获得 Shift +键的唯一代码。

    $(document).on("keypress", "#ta_0", function(event) {
      blacklisted_characters = [
        123, // {
        125, // }
        60, // <
        62 // >
      ];
      if (blacklisted_characters.indexOf(event.which) >= 0) {
        alert("Désolé, l\'utilisation de ce caractère n\'est pas autorisée.");
      }
    });
    

    我试图把它与alphanum插件结合起来,但是加载github用户内容似乎有问题。 But here you can see an example of the code above

答案 1 :(得分:0)

好吧,它不优雅,你必须稍微调整一下才能让它变得更好,但它能做到我认为你需要的东西:

$("#myText").on("keyup",function(event){
    //console.log(event.which);
    if(event.which == 219 || event.which == 221 || event.which == 188 || event.which == 190)
        {
            $("#myText").val($("#myText").val().replace(/<|>|{|}/gi,""));
        }
});

希望它有所帮助。