所以,我在这里有一个工作版本:http: //jsfiddle.net/yEmvm/19/
当您单击第一个地址块的公司,然后单击名称时,它会触发事件并显示无效地址。在我为第二个地址块或第一个地址块之外的任何地方找到公司之前,我不想触发该事件。我想不出另一个事件来触发它。
这只是一个例子。此页面将包含未知数量的地址块,从 3 到 99。此外,它将包含更多字段用于完整地址。用户可以通过按钮继续添加更多内容。但是,class 和 id 的名称结构是一致的。
所以,我在这里有一个工作版本:http: //jsfiddle.net/yEmvm/19/
当您单击第一个地址块的公司,然后单击名称时,它会触发事件并显示无效地址。在我为第二个地址块或第一个地址块之外的任何地方找到公司之前,我不想触发该事件。我想不出另一个事件来触发它。
这只是一个例子。此页面将包含未知数量的地址块,从 3 到 99。此外,它将包含更多字段用于完整地址。用户可以通过按钮继续添加更多内容。但是,class 和 id 的名称结构是一致的。
您应该在超时时运行您的代码,并在焦点上取消计时器:
$('.address').each(function()
{
var timer;
$(this).find('input').blur(function()
{
timer = setTimeout(function()
{
var verified = false; // run your verification here
if ( ! verified )
{
// run code here to display error
}
}, 0);
})
.focus(function()
{
timer && clearTimeout(timer);
});
});
这是一个非常基本的示例:http: //jsfiddle.net/U6TRj/3/
解释:
基本上,如果您在input
关注另一个元素的同时单击一个元素input
,浏览器将首先触发blur
旧元素上的focus
事件,然后触发新元素上的事件。
我们在这里所做的timeout
(不需要延迟)是将代码的执行推入堆栈,以便它在focus
事件处理程序之后执行。这样,我们可以从focus
回调中取消它的执行。
这是 .focusout() http://api.jquery.com/focusout/#dsq-comment-108827731的 jQuery API 文档中记录的行为
也许那里建议的插件可以帮助您解决问题:http: //archive.plugins.jquery.com/project/focus