2012-03-05 5 views
0

Я динамически вставляю изображения, используемые в качестве кнопок, и добавляю событие onClick.заменить динамически обработчик onclick

$("img.image_edit_customer").live("click", function() { 
    // when clicking the edit image of a row 
    $(this).manipulateCustomer("editRowCustomer", { 
     scope : "#customer_tbody" 
    }); 
}); 

Позже я хочу удалить событие onClick из изображения, используемого в качестве кнопки.

$('img[class^="image_edit"]').live('click', function() { 
    // do nothing from now on 
    alert('edit'); 
}); 

Теперь, он всегда выполняет старую и новый обработчик.

UPDATE

Если я использую die('click');, я все еще могу выполнить событие OnClick один раз.

ответ

1

Для JQuery 1.7+

Чтобы прикрепить событие, которое работает только один раз и затем удаляет себя:

$(document).one("click", "img.image_edit_customer", function() { 
    $(this).manipulateCustomer("editRowCustomer", { 
     scope : "#customer_tbody" 
    }); 
}); 

Чтобы прикрепить событие, которое может быть удалить в более позднее время:

$(document).on("click", "img.image_edit_customer", editRow); 

Чтобы удалить событие:

$(document).off("click", "img.image_edit_customer", editRow); 

Функция установка и удаление

function editRow(e) { 
    $(e.target).manipulateCustomer("editRowCustomer", { 
     scope : "#customer_tbody" 
    }); 
} 
+0

Это также работает для динамически вставленных изображений? –

+0

Да, этот метод должен работать с любым элементом, который может иметь прикрепленный обработчик. Он прослушивает уровень документа для любого события «щелчка», которое пузырится вверх, поэтому, если селектор целевого элемента верен, он будет работать, но вы должны попытаться использовать более близкого родителя, чем «документ», что, конечно, если это возможно, не было динамически поставлено. – adeneo

0

Поскольку вы используете .live() связать событие, которое нужно использовать метод .die() для удаления обработчика событий:

$('img[class^="image_edit"]').die('click'); 

Уведомление

По JQuery 1.7, рекомендуется использовать вместо этого используются методы .on() и .off(), чтобы прикреплять и деактивировать обработчики событий.

2

Так как вы подключаете события с живым методом, то необходимо использовать метод Die

http://api.jquery.com/die/

+1

+1, как 'live', так и' die' устарели t hought. – fardjad

+0

Полезно упомянуть об этом –

0

Вместо того, развязывание или убийство (сдохнет) событий для всех элементов, я бы маркировать отдельные элементы с классом «маркером», как так:

$("img.image_edit_customer").live("click", function() { 
    if(!$(this).hasClass('clicked')) { 
     $(this).addClass('clicked'); 
     $(this).manipulateCustomer("editRowCustomer", { 
      scope : "#customer_tbody" 
     }); 
    } 
}); 
Смежные вопросы