单击某个按钮时如何忽略jQuery事件?

单击某个按钮时如何忽略jQuery事件?,jquery,Jquery,在我的代码中,我有一个绑定到文本框的focusout事件的Ajax查找。如果提供的数据无效,Ajax请求将显示错误消息。我在表单上还有一个“取消”按钮,当单击该按钮时,会隐藏一些字段,包括包含请求的字段。但是,如果在文本框中指定了无效值,则单击Cancel按钮将触发Ajax请求(因为文本框失去焦点),并显示错误消息 我想要的是,当我单击cancel按钮时,此Ajax事件不会触发,因此即使用户输入了无效条目,表单也将“关闭”,而不会显示错误消息 这可能吗 代码是这样的,基本上: $('#txtPo

在我的代码中,我有一个绑定到文本框的
focusout
事件的Ajax查找。如果提供的数据无效,Ajax请求将显示错误消息。我在表单上还有一个“取消”按钮,当单击该按钮时,会隐藏一些字段,包括包含请求的字段。但是,如果在文本框中指定了无效值,则单击Cancel按钮将触发Ajax请求(因为文本框失去焦点),并显示错误消息

我想要的是,当我单击cancel按钮时,此Ajax事件不会触发,因此即使用户输入了无效条目,表单也将“关闭”,而不会显示错误消息

这可能吗

代码是这样的,基本上:

$('#txtPostalCode').focusout(function() { 
    postalCodeLookup($(this).val()); // ajax method wrapper
});

$('button#cancelButton').click(function() { 
    $('#txtPostalCode').attr('disabled', true).addClass('disabled'); // applies CSS style to make textbox look like a label
    $('#txtPostalCode').val($('#oldPostalCode').val()); // restore old value
});
正如我所说的,由于focusout在单击之前触发,如果文本框中有无效条目,则不能“取消”表单,因为它将触发ajax请求并产生错误消息。这个问题是从可用性的角度来看的,因为有人可能输入了无效的邮政编码,意识到他们的错误,然后尝试取消表单,但是表单不会让自己被取消,直到他们输入了有效的邮政编码(当表单实际取消时,它才被覆盖)


如果有更好的方法来处理我想做的事情,我也很乐意听到,这是我收到要求时想到的第一件事:)

这可能有点老套,但我会设置一个变量,通过在取消按钮上悬停来打开和关闭。然后在您的
focusout
代码中放置一个if块,仅当上述变量为false时才允许它触发。

这可能有点不太正常,但我会设置一个变量,通过悬停在取消按钮上来打开和关闭。然后在
focusout
代码中放入一个if块,仅当上述变量为false时才允许它触发。

focus
事件将在取消按钮的
单击
事件之前触发,因此除了中止ajax请求之外,您无法执行任何操作。在
XHR
对象上调用
abort
方法将中止当前请求

或者,在
focusout
事件上触发ajax请求之前,您可以有一些延迟,如果单击取消按钮,则在该时间内清除超时

像这样的

$(function(){
    var xhr;
    $('input').focusout(function(){
        xhr = $.ajax({
                 ...
              });
    });

    $('.cancel').click(function(){
        xhr.abort();
        //other stuff
    });
});


focus
事件将在取消按钮的
单击
事件之前触发,因此您只能中止ajax请求。在
XHR
对象上调用
abort
方法将中止当前请求

或者,在
focusout
事件上触发ajax请求之前,您可以有一些延迟,如果单击取消按钮,则在该时间内清除超时

像这样的

$(function(){
    var xhr;
    $('input').focusout(function(){
        xhr = $.ajax({
                 ...
              });
    });

    $('.cancel').click(function(){
        xhr.abort();
        //other stuff
    });
});


选项2对我很有帮助。谢谢你,先生。选项2对我很有帮助。谢谢你,先生。