如何阻止一个活动的jQuery事件处理程序多次触发?

zphenhs4  于 2022-12-22  发布在  jQuery
关注(0)|答案(2)|浏览(120)

我尝试对通过优秀的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;
    });

无论是unbind、stopPropagation还是return false都不会得到我想要的行为。我想我明白为什么,但我不知道如何阻止它(我担心我的jQuery-foo很弱)

j13ufse2

j13ufse21#

你能不能...

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

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

    // your function call that makes it invoke itself

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

}
ryevplcw

ryevplcw2#

您是否尝试将delegate(插入DOM元素所需)与one方法的,
毕竟one方法是专门为防止任何东西多次触发而创建的?

相关问题