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

时间:2010-07-19 16:23:06

标签: javascript jquery javascript-events

问候。

我正在尝试通过优秀的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很弱,我很害怕)

感谢您的建议。

2 个答案:

答案 0 :(得分:1)

你能做点什么......

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

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

    // your function call that makes it invoke itself

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

}

答案 1 :(得分:0)

您是否尝试delegate(插入的DOM元素需要)和one方法一起使用,

在专门创建one方法之后,只是为了防止任何事情多次触发?