我该如何阻止一个活jquery事件处理程序多次触发?
问题描述:
我想通过优秀的SyntaxHighlighter项目后处理添加到DOM的内容。
当SH格式化文本时,它会生成一堆HTML,然后将该HTML写入DOM。它创建了类“syntaxhighlighter”的div。
我想倾听插入这些新的div,并且当它们插入时,我想操纵一些html,然后用这个新的html覆盖dom中的html。
我的问题是,当我将这个新的html写回到dom时,它重新触发事件,首先触发我的处理程序,因此我停滞在浏览器查杀递归中。
这里是我迄今为止...
$('div.syntaxhighlighter').live('DOMNodeInserted', function(event){
//console.log(event);
var input = event.target.innerHTML;
var newInput = input.replace(/(dbo\..*?)(\(|\s)/ig,"<a href='?obj=$1'>$1</a>$2");
$(event.target).unbind();
event.stopPropagation();
$(event.target).html(newInput);
return false;
});
无论是解除绑定,也不是stopPropagation也不返回false将得到我想要的行为。我想我明白为什么,但我不知道如何阻止它(我的jquery-foo很虚弱,恐怕)
感谢您的建议。
答
你可以这样做..
if (!$(this).data('writing')) {
$(this).data('writing', 1);
// your function call that makes it invoke itself
$(this).data('writing', 0);
}
我会在这里使用'$ .data(this,'writing')'...不需要创建浪费的jQuery对象:) – 2010-07-19 16:27:12
完美...完成了工作。谢谢! – 2010-07-19 18:22:47