代码之家  ›  专栏  ›  技术社区  ›  marc esher

如何阻止活动jquery事件处理程序多次触发?

  •  0
  • marc esher  · 技术社区  · 15 年前

    问候语。

    我试图对通过优秀的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和returnfalse都不会得到我想要的行为。我想我知道为什么,但我不知道如何阻止它(我的jqueryfoo很弱,我害怕)

    谢谢你的建议。

    2 回复  |  直到 15 年前
        1
  •  1
  •   meder omuraliev    15 年前

    你能做点像。。

    if ( !$(this).data('writing') ) {
    
        $(this).data('writing', 1);
    
        // your function call that makes it invoke itself
    
        $(this).data('writing', 0 );
    
    }
    
        2
  •  0
  •   adardesign    15 年前

    delegate (插入的DOM元素需要)以及 one 方法的,

    经历了这么多 方法是专门为防止任何东西多次触发而创建的吗?