Как бы я остановил запуск обработчика событий jquery несколько раз? - PullRequest
0 голосов
/ 19 июля 2010

Привет.

Я пытаюсь пост-обработать контент, который добавляется в DOM через отличный проект SyntaxHighlighter.

Когда SH форматирует текст, он генерирует кучу HTML изатем записывает этот HTML в DOM.Он создает div с классом "syntaxhighlighter".

Я хочу прослушать вставку этих новых 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 ]

1 голос
/ 19 июля 2010

Можете ли вы сделать что-то вроде ..

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

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

    // your function call that makes it invoke itself

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

}
0 голосов
/ 19 июля 2010

пытались ли вы делегировать (необходимо для вставленного элемента DOM) вместе с методами one ,

в конце концов, метод one специально создан только для того, чтобы предотвратить запуск чего-либо более одного раза?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...