jquery отвязать щелчок не работает

Пожалуйста, помогите мне. Заранее спасибо! Вот простая кодировка:

var $newbox = $( "<div/>" );
$newbox.addClass("init_box");
for(i=0; i<3; i++) {
    $("#game").append($newbox.clone().click(function(){
        $(this).addClass("select_box"); 
        $("div.init_box").unbind("click");
    }));
}

Я хочу создать 3 div, и как только любой из этих 3 div будет щелкнут, другие отвяжут событие click. Но код выше не работает.


person ansvver    schedule 22.10.2013    source источник
comment
Сделайте следующее: $("div.init_box").off("click"); Надеюсь, это поможет :) API api.jquery.com/off   -  person Tats_innit    schedule 22.10.2013


Ответы (3)


Вам нужно связать обработчик кликов с помощью .bind(), если вы собираетесь использовать .unbind();

person Neil Girardi    schedule 22.10.2013

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

var $newbox = $('<div/>', {
    'class': 'init_box'
}).on('click.select', function () {
    $(this).addClass("select_box");
    $("#game .init_box").off("click.select");
});

for (i = 0; i < 3; i++) {
    $newbox.clone(true, true).appendTo('#game').html(i)
}

Демонстрация: Fiddle

person Arun P Johny    schedule 22.10.2013

Это должно работать.

var $newbox = $( "<div/>" );
$newbox.addClass("init_box");
for(i=0; i<3; i++) {
    $newbox.clone().appendTo("#game").click(function(){
        $(this).addClass("select_box"); 
        $("div.init_box").unbind("click");
    });
}

В вашем примере вы пытаетесь добавить обработчик к объекту до того, как он будет вставлен в DOM, это не работает.

Вы должны сначала вставить его в DOM, а затем добавить обработчик.

В качестве альтернативы вы можете использовать живые привязки. http://api.jquery.com/on/

person Will    schedule 22.10.2013