使用JavaScript进行字段验证 - onkeyup?

时间:2012-03-05 04:47:41

标签: javascript validation

我在这里有一个由onkeypress触发的代码...我想让它在输入特殊字符时发出警报。除了警报之外,如果用户在字段中键入特殊字符,则应删除键入的特殊字符,焦点应返回到字段。我似乎无法动摇这个问题。你能帮助我吗?提前谢谢:D

function ei(e)
{
  var iChars = "!@#$%^&*()+=-[]\\\';,./{}|\":<>?";
  for (var i = 0; i < e.value.length; i++) {
    if (iChars.indexOf(e.value.charAt(i)) != -1) {
      alert ("Please do not use special characters.");
      e.value = e.value-1;
      e.focus();
      return false;
    }
  }
}

这将在文本字段中调用..像这样

<input type="text" name="name" onkeyup="ei(this)">

3 个答案:

答案 0 :(得分:2)

这里有一些奇怪的事情发生。

  1. 您不想使用HTML元素的onkeyup属性。绑定事件监听器函数,使代码更加模块化。
  2. 像其他人说的那样,你不能像那样使用减法运算符。
  3. 您可能不希望每次有人输入无效字符时发出警报。这只会惹恼和激怒用户。我只是将它记录到控制台,但你应该考虑将错误文本放在输入元素旁边。

    $(function () {
      function ei(e) {
        var iChars = "!@#$%^&*()+=-[]\\\';,./{}|\":<>?";
        for (var i = 0; i < this.value.length; i++) {
          if (iChars.indexOf(this.value.charAt(i)) != -1) {
            console.log("Please do not use special characters.");
            this.value = this.value.slice(0, this.value.length - 1);
            this.focus();
            return false;
          }
        }
      }
    
      $('#hurp').on('keyup', ei);
    });
    
  4. 并在输入元素中添加一个id:

    <input type="text" name="name" id="hurp">​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​
    

    请参阅此JSFiddle:http://jsfiddle.net/QgLcB/

答案 1 :(得分:1)

e.value = e.value-1;没有按你的想法行事。

您可能想要使用substr()

答案 2 :(得分:1)

为什么你会费心使用keyup事件?最好使用keydownkeypress事件,然后取消它(我使用this site查找密钥代码):

function ei (event) {
    event = event || window.event;

    switch (event.keyCode) {
        case 47: //.
        case 33: //!
        //etc
            event.preventDefault(); //cancel the current action, which will stop it writing out to the textbox
            break;
        default:
            break;
    }
}

我还建议您研究jQuery,而不是使用内联JavaScript来连接您的事件,还要查看jQuery Validation plugin,因为它可以帮助您处理大量代码。