Jquery перепривязать нажмите после отмены привязки - PullRequest
2 голосов
/ 09 августа 2011

У меня есть элемент внутри div, с которым связано событие click. Оба события щелчка работают нормально, за исключением того, что оба они запускаются одновременно.

Когда я нажимаю на внутренний элемент, чтобы отключить событие click родительского div:

Мой HTML (внутри цикла бритвы MVC @foreach):

<td class="tdfuncLangSignOff tdNotChecked tdLang@(item.Language.Name)" title="@(item.SignedOffStatus)">
    <div class="addComment"></div>
    @Html.Hidden("funcSignOffId", item.Id)
</td>

Мой jquery:

var handler = function () {
    var thisTD = $(this);
    var signOffId = thisTD.parent().children("input#funcSignOffId").val();
    console.log("parent div click");
}

    $(".tdfuncLangSignOff").click(handler);

$(".addComment").click(function () { 
    $(this).parent().unbind("click")
    console.log("nested div click");
    //$(this).parent().click(handler)
});

Я нашел идею обработчика из этой темы

Это позволяет мне нажимать на div addComment и отключать щелчок на родительском div, как я хотел. Но переплет явно не происходит. Когда я раскомментирую $(this).parent().click(handler) в функции щелчка addComment, щелчок срабатывает, и на консоли отображается «родительский щелчок div».

Как я могу повторно привязать щелчок родительского div, не вызывая его немедленно?

Ответы [ 3 ]

5 голосов
/ 09 августа 2011

Если я правильно вас понимаю: чтобы остановить распространение события, используйте event.stopPropagation ().

пример:

<div id="a">
    Outer
    <div id="b">Inner</div>
<div>

и в JQuery:

$("#a").click(function(event) {alert("a");});
$("#b").click(function(event) {alert("b"); event.stopPropagation();});

Подробнее можно прочитать здесь: http://api.jquery.com/event.stopPropagation/

0 голосов
/ 09 августа 2011

Я подозреваю, что причина в том, что вы перепривязываете обработчик щелчка в дочернем событии щелчка, а затем событие распространяется на следующий уровень (его родитель), который теперь снова имеет обработчик щелчка.

Если я не пропущу что-то еще, совет Наора о прекращении распространения должен служить вашей цели.

0 голосов
/ 09 августа 2011

Вы можете попробовать:

$(this).parent().bind('click');
...