如何使用jquery在div容器退出时触发事件

时间:2012-07-17 20:15:10

标签: jquery

所以,我在这里有一个工作版本:http://jsfiddle.net/yEmvm/19/

当您单击第一个地址块的公司,然后单击该名称时,它会触发该事件并显示无效地址。直到我把公司的第二个地址块或第一个地址块外面的任何地方cilck,我都不想解雇那个事件。我无法想出另一个触发此事件的事件。

这只是一个例子。此页面将包含从3到99的未知数量的地址块。此外,它将包含更多字段以用于完整地址。用户可以通过按钮继续添加更多内容。但是,class和id名称结构是一致的。

2 个答案:

答案 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