Как убрать onclick с помощью JQuery?


100

Код PHP:

<a id="a$id" onclick="check($id,1)" href="javascript:void(0)"  class="black">Qualify</a>

Я хочу удалить, onclick="check($id,1)чтобы по ссылке нельзя было щелкнуть или " check($id,1)не запускалось". Как я могу сделать это с помощью JQuery?

Ответы:


239

Старый способ (до 1.7):

$("...").attr("onclick", "").unbind("click");

Новый путь (1.7+):

$("...").prop("onclick", null).off("click");

(Замените ... нужным селектором.)


26
Разве это не должно быть removeAttr ('onclick')?
Роатин Март,

Да, хороший момент, может быть и чище, но я не уверен, что это будет отличаться с точки зрения исполнения.
glmxndr

6
С jQuery 1.7+ вы можете использовать включение / выключение: stackoverflow.com/questions/209029/…
Лэнс Кливленд,

6
См. Первый комментарий к removeAttr api.jquery.com/removeattr Removing an inline onclick event handler using .removeAttr() doesn't achieve the desired effect in Internet Explorer 6, 7, or 8. To avoid potential problems, use .prop() instead
andyface 08

2
@andyface да, это есть в документации, но мне пришлось использовать и .prop()для IE11.
onetwo12

58

Я знаю, что это довольно давно, но когда потерянный незнакомец находит этот вопрос в поисках ответа (как это сделал я), тогда это лучший способ сделать это вместо использования removeAttr ():

$element.prop("onclick", null);

Ссылаясь на официальный документ jQuerys :

«Удаление встроенного обработчика событий onclick с помощью .removeAttr () не приводит к желаемому эффекту в Internet Explorer 6, 7 или 8. Чтобы избежать потенциальных проблем, используйте вместо этого .prop ()»


1
Я обнаружил, что это лучший способ удалить событие onlick, если вы напечатали его вот так. <span onlick="method()">sometext>/span>Мероприятие полностью без привязки и отлично работает
zdarsky.peter

3
Не думаю, что это лучший способ. jsfiddle.net/TN2wr vs jsfiddle.net/TN2wr/1
Гас,

Я использую JQ старше 1.6, поэтому $ (element) .attr ('onclick', null); работает для меня.
metamagikum

18

Удаление onclickсобственности

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

<button id="myButton" onclick="alert('test')">Married</button>

Затем вы можете удалить событие следующим образом:

$("#myButton").prop('onclick', null); // Removes 'onclick' property if found

Удаление clickслушателей событий

Предположим, вы добавили событие щелчка, определив прослушиватель событий, например:

$("button").on("click", function() { alert("clicked!"); });

... или вот так:

$("button").click(function() { alert("clicked!"); });

Затем вы можете удалить событие следующим образом:

$("#myButton").off('click');          // Removes other events if found

Удаление обоих

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

$("#myButton").prop('onclick', null)  // Removes 'onclick' property if found
              .off('click');          // Removes other events if found



5

После стольких попыток с bind, unbind, on, off, click, attr, removeAttr, prop я заставил это работать. Итак, у меня есть следующий сценарий: в моем html я НЕ прикрепил никаких встроенных обработчиков onclick.

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

$(element).attr('onclick','myFunction()');

Чтобы удалить это позже из Javascript, я использовал следующее:

$(element).prop('onclick',null);

Вот как у меня работало динамическое связывание и отключение событий щелчка в Javascript. Не забывайте НЕ вставлять в свои элементы какие-либо встроенные обработчики onclick.


Мне это нравится, но почему один должен быть prop, а другой attr?
Stachu

Я не уверен, но, как я вижу, с помощью attr вы добавляете / вводите обработчик onclick с соответствующим myFunction (), а prop ('onclick', null) удаляет атрибут, поэтому функция не будет вызываться. Так у меня это сработало. И я мог заметить, как у элемента был обработчик onclick через attr и как он был удален после prop.
bboydflo

1
Для справки в будущем вам действительно стоит использовать .on('click', myFunction)(обратите внимание, что myFunctionэто не в кавычках), а затем, позже,.off('click')
JDB все еще помнит Монику

1

Что, если событие onclick происходит не непосредственно в элементе, а в родительском элементе? Это должно работать:

$(".noclick").attr('onclick','').unbind('click');
$(".noclick").click(function(e){
    e.preventDefault();
    e.stopPropagation();
    return false;
});

Добавление еще одного прослушивателя кликов (для предотвращения по умолчанию и т. Д.) Может добавить его в конец списка прослушивателей, и, таким образом, другие прослушиватели все равно будут выполняться первыми. Я не уверен, будет ли он добавлен первым или последним в списке. В любом случае лучше использовать «выключено», как показано в других ответах.
Frederic Leitenberger

0

Попробуйте это, если вы отвяжете событие onclick по идентификатору. Затем используйте:

$('#youLinkID').attr('onclick','').unbind('click');

Попробуйте это, если вы отвяжете событие onclick от класса. Затем используйте:

$('.className').attr('onclick','').unbind('click');
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.