0

我有一个使用大量 javascript 和 ajax 来确定每个字段是否有效的 Web 表单。它会即时提供警告消息,以帮助用户了解何时出现问题。我什至在提交按钮上使用“禁用”功能,直到一切正常。但问题是:所有事件处理都使用“onblur”功能进行。但是当最后一个字段被填写时,验证不会发生,直到用户点击离开该字段。但他们为什么会呢?除了单击提交之外,页面上没有什么可做的,除非他们首先单击其他地方,其他任何地方,否则他们无法执行此操作(以触发验证事件)。我正试图找到解决这个问题的方法。必须有一种方法,他们不必进行额外的点击。它似乎并不专业。有没有解决这个问题的标准方法?每次用户输入单个字母时是否可以触发验证事件?

提前致谢

4

3 回答 3

1

表单节点有一个onsubmit在用户尝试提交表单时触发的事件。您可以使用它来验证所有表单字段并决定是否让用户提交表单。一般的实现是这样的:

<form onsubmit="return validateForm()">
    ...
</form>

并且在你的 JavaScript 函数中,如果用户可以继续提交表单,你必须返回 true,或者在表单提交之前取消用户的请求。

(在伪代码中):

function validateForm(){
    if(formIsOkay){
        return true;
    }else{
        return false;
    }
}
于 2012-04-25T03:51:30.037 回答
0

您可以使用 onkeyup 验证每个字段,并将您的用户通知保留给 onblur 方法,这样它就不会变得烦人。如果 onkeyup 中所有字段都有效,请启用提交按钮。

于 2012-04-25T03:49:08.107 回答
0

鉴于 {onChange, onKeyup, blur, etc} 在处理复制/粘贴或其他边缘情况时的限制,我可能会添加一个计时器以每 500 毫秒左右轮询一次并启用/禁用提交按钮:

window.setInterval(checkEnableSubmit, 500);

function checkEnableSubmit(){
   if(validateForm()){
       // enable submit button
   } 
}

function validateForm(){
     if(formIsOkay){
         return true;
     }
     return false;
}

我仍然会在按钮单击时调用 validateForm() 以避免用户在调用计时器之前使数据无效并提交。服务器端验证是给定的,但如果可能的话,我想避免错误的提交。

于 2012-04-25T05:41:32.180 回答