2010-07-19 91 views
0

问候。我该如何阻止一个活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很虚弱,恐怕)

感谢您的建议。

回答

1

你可以这样做..

if (!$(this).data('writing')) { 

    $(this).data('writing', 1); 

    // your function call that makes it invoke itself 

    $(this).data('writing', 0); 

} 
+3

我会在这里使用'$ .data(this,'writing')'...不需要创建浪费的jQuery对象:) – 2010-07-19 16:27:12

+0

完美...完成了工作。谢谢! – 2010-07-19 18:22:47

0

,您是否试图delegate(需要插入的DOM元素)连同one方法的,

毕竟one方法是专门刚刚创建预防什么东西不止一次射击?

相关问题