Подтвердить что ты не робот

Отвязать inline onClick, не работая в jQuery?

Хорошо, мне интересно, как отвязать встроенное событие onclick в jQuery. Вы думаете, что .unbind() будет работать, но это не так.

Чтобы проверить это для себя, поиграйте со следующими HTML и JavaScript:

function UnbindTest() {
    $("#unbindTest").unbind('click');
}

function BindTest() {
    $("#unbindTest").bind('click', function() { alert("bound!"); });
}


<button type="button" onclick="javascript:UnbindTest();">Unbind Test</button>
<button type="button" onclick="javascript:BindTest();">Bind Test</button>
<button type="button" onclick="javascript:alert('unbind me!');" id="unbindTest">Unbind Button</button>

Как вы можете видеть, unbinding не отвязывает событие inline onclick... однако он отбрасывает событие click, добавленное с помощью bind().

Итак, мне интересно, есть ли способ отключить встроенные события onclick, не выполняя следующие действия:

$("#unbindTest").get(0).onclick = "";

Спасибо

4b9b3361

Ответ 1

jQuery unbind не будет работать с атрибутами onclick - он работает только для функций, которые были добавлены через bind и, следовательно, доступны в $(...).data('events'). Вы должны использовать removeAttr для удаления onclick.

Прочтите этот вопрос для получения дополнительной информации.

Ответ 2

unbind Отключает обработчики событий, зарегистрированные с помощью bind, а не те, которые назначаются через атрибуты onclick или другие DOM0. Из документов:

Любой обработчик, прикрепленный с помощью .bind(), может быть удален с помощью .unbind().

Изменить: вы отвязываете обработчики DOM0, очищая соответствующий атрибут элемента. Мне пришлось искать способ jQuery: removeAttr.