jQuery模糊事件通过动态内容编辑多次触发

时间:2011-11-26 06:26:24

标签: javascript jquery contenteditable onblur

当我点击某个类的div元素时,我将contenteditable更改为true。点击了div的onblur我希望它提醒某些事情。我第一次模糊div,它工作正常,但之后它显示相同的警报两次。所以第一次,它会提醒一次。第二次,它会发出两次警报等等。

我做错了什么?

content = $('#content');

content.delegate('div', 'click', function(event){
    $(this).attr('contenteditable', 'true');
    $(this).focus();
    $(this).bind('blur', function(){
        alert('blur');
    });
}); 

示例:http://jsfiddle.net/W8que/4/

1 个答案:

答案 0 :(得分:3)

每次点击都会再次绑定模糊。每个绑定都是新的,它们是堆叠的。使用.delegate()(或.on())也可以使用模糊功能。

小提琴:http://jsfiddle.net/W8que/11/

代码:

content = $('#content');

content.on('click', 'div', function(){
    $this = $(this);
    $this.attr('contenteditable', 'true');
    $this.focus();
});

content.on('blur', 'div', function(){
  alert('blur');
});

由于小提琴已经在使用jQuery 1.7.x,我继续将.delegate()换成更新的.on()。除了缓存$(this)等其他一些内容之外,还没有将事件传递给函数,因为我们无需preventDefault()stopPropagation()