在其他回调完成之前阻止事件

时间:2012-12-16 09:25:20

标签: javascript jquery backbone.js

我有一个使用backbone.js和jQuery for UI的应用程序。我在页面上有一个表单,附加到表单的文本框模糊事件是一个函数,在某些条件下向用户显示弹出窗口并等待它的输入 - 使用ajax调用WCF服务来检查条件。

一切正常,直到我在文本字段上设置焦点时单击表单的提交按钮 - 然后显示弹出窗口,但在其后面提交表单。

当然正确的结果是取消第二个事件(如果显示弹出窗口肯定无法提交表格)

我怎样才能做到这一点?

3 个答案:

答案 0 :(得分:0)

我无法理解你,但可能这就是你所需要的:event.stopPropagation();

http://api.jquery.com/event.stopPropagation/

或.off()

http://api.jquery.com/off/

答案 1 :(得分:0)

您是说点击“提交”导致弹出窗口显示 - 这不是应该显示的“特定条件”之一吗?我会考虑向模糊处理程序添加一个条件,检查是否单击了提交按钮。在这种情况下不要显示弹出窗口。

取消onSubmit处理程序中的事件 -

form.addEventListener("submit", function(evt){
evt.cancel()
//dont want to catch it again
form.removeEventListener(this)   
popup.show()
//have the popup call submit when done, it wont be caught again
}

答案 2 :(得分:0)

如果弹出窗口可见,您可以绑定到<form>的{​​{3}}事件并调用其submit方法来禁止提交:

$("form").submit(function(e) {
    if ($("selector_matching_your_popup").is(":visible")) {
        e.preventDefault();  // Cancel submission.
    }
});

您也可以从处理程序返回false而不是调用preventDefault(),但这也会阻止submit事件传播到您可能不需要的祖先元素。< / p>