所以,我在这里有一个工作版本:http://jsfiddle.net/yEmvm/19/
当您单击第一个地址块的公司,然后单击该名称时,它会触发该事件并显示无效地址。直到我把公司的第二个地址块或第一个地址块在外面的任何地方cilck,我都不想解雇那个事件。我无法想出另一个触发此事件的事件。
这只是一个例子。此页面将包含从3到99的未知数量的地址块。此外,它将包含更多字段以用于完整地址。用户可以通过按钮继续添加更多内容。但是,class和id名称结构是一致的。
答案 0 :(得分:4)
您应该在超时时运行代码,并在焦点上取消定时器:
$('.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
事件1}}关于新元素的事件。
我们在这里使用timeout
(不需要延迟),正在将代码执行推送到堆栈中,以便在focus
事件处理程序之后执行。这样,我们可以在focus
回调中取消它的执行。
答案 1 :(得分:1)
这是在.focusout()的jQuery API文档中记录的行为 http://api.jquery.com/focusout/#dsq-comment-108827731
也许该插件建议可以帮助您解决问题: http://archive.plugins.jquery.com/project/focus