.blur()和.click()事件重叠

时间:2013-08-21 19:47:50

标签: jquery

我有一个可编辑的元素,我正在跟踪.blur()事件,使其无法编辑。我还有另一个元素应该用作“确定”按钮,表示用户已完成编辑。这是HTML(#input是可编辑的元素,#ok是OK按钮):

<div id='container'>
    <span id='input' contenteditable='true'></span>
    <a href="#" id='ok'></a>
</div>

和CSS:

#container {
    border: 1px solid black;
    width:100px;
    position:relative;
}
#input {
    display: inline-block;
    width: 80px;
}
#ok {
    display: inline-block;
    width: 20px;    
    height: 20px;    
    background: green;
    cursor:pointer;
    position: absolute;
    right: 0;
}

我有两个事件绑定:

$('#ok').click(function(){alert('it is clicked')});
$('#input').blur(function(){alert('blur is detected')});

但是每当我点击OK按钮时,都会触发.blur()事件,这不是我想要的行为。此外,在我收到有关.blur()事件的通知后,我没有收到关于.click()事件的通知,我认为这应该发生,因为这是事件堆栈中的下一个事件。如果单击按钮,可以避免获取.blur()事件吗? 以下是表示案例的jsFiddle

3 个答案:

答案 0 :(得分:1)

在这方面已经解决了它应该解决你的问题。 Stackoverflow Answer

基本上,只要你试图退出输入框,就会触发模糊,一旦按下确定,你就可以点击按钮,但上面的链接会告诉你如何解决这个问题

答案 1 :(得分:1)

这将有效:

$('#input').focus();
$('#ok').click(function () {
    alert('it is clicked')
});
var over_click;
$('#ok').mouseenter(function () {
    over_click = true;
}).mouseleave(function () {
    over_click = false;
});
$('#input').blur(function () {
    if (!over_click) {
        alert('blur is detected')
    }
});

演示 here

答案 2 :(得分:1)

也许尝试$('#container').blur(function(){alert('blur is detected')});