任何方式来覆盖.blur()如果.submit()在jQuery中被调用?

问题描述:

我正在为网站编写CMS的自定义代码。当用户点击提交按钮(使用jQuery UI创建)时,它会调用按钮上的click事件,然后调用提交表单的提交事件。任何方式来覆盖.blur()如果.submit()在jQuery中被调用?

说的形式还检查特定字段,看看他们是否有文本,并会显示错误消息,并停用提交按钮,直到问题得到解决。为此,我目前使用.focus(),它内部有一个.blur()函数,用于检查错误是否被修复,如果是,则移除该通知(如果没有其他错误,则重新激活该按钮)。

现在,我遇到的问题是,如果用户随时编辑其中一个被检查的字段,如果他们没有点击它并尝试提交表单数据,则.blur()函数会接受控制(因为它应该如何编码),所以需要第二次点击才能提交​​表单数据。

有没有办法让.submit()在jQuery中优先于.blur(),所以这个问题不会发生(现在我可以简单地告诉用户使用它不要执行引起它的步骤) ?

(如果你们需要的代码,我可以尝试发布它的某些位在这里。)

+0

请不要包含的代码,它不是从你的问题不清楚是什么与您的模糊效果防止发生提交。 – 2010-07-28 10:42:50

+0

我有完全相同的问题 – jeje 2011-03-02 00:14:33

在昨天晚上想了一会儿之后,我意识到如果我在快速调试blur()之前做了一个快速检查以确定错误是否可见,它会解决我的问题(做了快速测试,似乎有问题)。

感谢有关事件传播停止的建议,但我必须牢记这一点。

尝试停止onblur事件的事件传播:

$(form).submit(function(){ 
    blur.stopPropagation() 
... 
}); 

在这里看到:http://api.jquery.com/event.stopPropagation/

我尝试删除输入字段上的模糊事件,并使用窗体验证函数的onFocusout事件。该解决方案为我工作。

其他最好的解决方案是设置计时器,在触发按钮单击事件之前延迟模糊事件动作。

//命名空间定时器 VAR的SetTimer = { 定时器:空 }

 $('input,select').blur(function() { 
      setTimer.timer = setTimeout(function() { 
       functionCall(); 
      }, 1000); 
     }); 

     $('input,select').focus(function() { 
      setTimer.timer = setTimeout(function() { 
       functionCall(); 
      }, 1000); 
     }); 

     $("#btn").click(function() { 
      clearTimeout(setTimer.timer); 
      functionCall(); 
     });