3

我正在为网站的 CMS 编写自定义代码。当用户单击提交按钮(使用 jQuery UI 创建)时,它会调用按钮上的单击事件,该事件又会调用提交事件,从而提交表单。

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

现在,我遇到的问题是,如果用户随时编辑正在检查的字段之一,如果他们不点击它并尝试提交表单数据,则 .blur() 函数将获得控制权(因为它应该通过它的编码方式),因此需要第二次单击才能提交​​表单数据。

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

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

4

3 回答 3

2

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

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

见这里:http ://api.jquery.com/event.stopPropagation/

于 2010-07-28T05:04:28.437 回答
2

我尝试删除输入字段上的模糊事件并使用表单验证功能的 onFocusout 事件。该解决方案对我有用。

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

// 定时器的命名空间 var setTimer = { timer: null }

        $('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();
        });   
于 2010-12-29T06:30:06.433 回答
0

昨晚想了一下之后,我意识到如果我在调用 blur() 之前快速检查以确保错误是否可见,它将解决我的问题(快速测试,似乎有) .

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

于 2010-07-28T19:45:55.477 回答