模糊事件会停止点击事件

时间:2012-02-27 23:42:42

标签: javascript jquery

示例代码:http://jsfiddle.net/slolife/PnmxM/

我问这个问题虽然有很多类似的问题,但我觉得它们不一样。

我有一个文本框,当它模糊时,应该做点什么。

我也有一个链接,它总是可见的(似乎是其他问题的不同之处),点击后,应该做点什么。

我的模糊处理程序触发,但点击处理程序没有。

有没有正确的方法来解决这个问题?

更新

许多人指出警报导致了我的问题。谢谢。在我的真实代码中,我没有警报,而是从DOM中删除文本框。

所以我更新了小提琴,以便更好地反映使用console.log调用而不是alert()调用。任何额外的帮助表示赞赏。

5 个答案:

答案 0 :(得分:9)

这是因为第一个alert打破了第二个alert,因为它是模态的。见:

在这里,我将消息附加到msgs div,它按预期工作。

对于你更新的jsFiddle,这是一个(更新更新?)工作的一个:

您正在移除onBlur中的输入框,因此,垂直移动Add item,因此点击不再发生在Add item上(因为您的鼠标指针在此期间没有移动,但在其他一些元素上(在这种情况下,是一个jsFiddle示例容器)。将Add item移到正在消失的input元素上方可以解决“如果可以,请点击我”问题。

答案 1 :(得分:1)

点击事件未触发,因为只有在释放鼠标按钮时才会触发。这种情况没有发生,因为可以看到模态对话框窗口(警报窗口)。如果您将提醒更改为console.log,那么它可以完美运行......

http://jsfiddle.net/PnmxM/7/

答案 2 :(得分:1)

因为你正在使用alert,你正在中断执行,这会导致我在Firefox中出现问题 - 但如果切换到console.log并确保你有一个控制台(如Firebug)打开,你可以看到两个事件都在发生。

function onBlur() {
    console.log('blur');
}

function addItem() {
    console.log('add');
}

$(document).ready(function() {
    $('#items').delegate('input','blur', onBlur);
    $('#addItem').click(addItem);
});

答案 3 :(得分:0)

根据您的要求,如果您无法重新排列用户界面,另一种解决方法是简单地绑定到mousedown事件而不是click。我已经添加了我的own modification console.log()jsFiddle来演示。

我遇到了这个问题,其中的菜单显示用户何时关注文本框,并在模糊时隐藏。菜单中的点击不会在Chrome中触发,因为模糊隐藏了mousedown上的菜单,所以当鼠标重新启动时,指针不再出现在菜单中(因为它已经消失),因为然后在模糊隐藏菜单之前调用处理程序,我的点击事件就会触及目标。

答案 4 :(得分:0)

在更新小提琴http://jsfiddle.net/slolife/PnmxM/之后尝试。

将onBlur函数更新为此。

模糊并点击即可。

 function onBlur() {
        console.log('blur');
        $('#item').val("test");
    }

目前的问题是:点击不会触发,因为"添加项目"正在改变(因为文本字段消失了)。