繁体   English   中英

如何停止实时jquery事件处理程序触发多次?

[英]How would I stop a live jquery event handler from firing more than once?

问候。

我正在尝试对通过出色的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或return false都不会得到我想要的行为。 我想我知道为什么,但是我不知道如何阻止它(恐怕我的jquery-foo很弱)

感谢您的建议。

你能做点什么..

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

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

    // your function call that makes it invoke itself

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

}

您是否尝试了委托 (需要插入的DOM元素)以及一个方法的委托

毕竟, 一种方法是专门为防止任何事物触发多次而创建的吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM