单击某个按钮时如何忽略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对我很有帮助。谢谢你,先生。