Вопрос по attributes, jquery, javascript-events, event-handling, jquery-events – Как удалить «onclick» с помощью JQuery?

82

Код 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?

Ваш Ответ

8   ответов
0

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

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

$('.className').attr('onclick','').unbind('click');
1

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

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

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

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

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

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

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

Именно так у меня получалось динамически связывать и откреплять события кликов в Javascript. Помните, что НЕ вставляйте встроенный обработчик onclick в ваши элементы.

Я не уверен, но, как я вижу, это то, что с помощью attr вы добавляете / вводите обработчик onclick с соответствующей функцией myFunction (), а свойство prop ('onclick', null) удаляет атрибут, поэтому никакая функция не будет вызываться. Вот как это работает для меня. И я мог заметить, как элемент имел обработчик onclick через attr и как он был удален после prop. bboydflo
Для дальнейшего использования вы должны использовать.on('click', myFunction) (Обратите внимание, чтоmyFunction являетсяне в кавычках), а затем, позже,.off('click') JDB
Мне нравится это, но почему один должен быть опорой, а другой - атрибутом? Stachu
11
Удалениеonclick свойство

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

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

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

$("#myButton").prop('onclick', null); // Removes 'onclick' property if found
Удалениеclick слушатели событий

Предположим, вы добавили событие 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
57

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

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

ПриводяJQuerys официальный доку:

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

Я использую JQ старше 1.6, поэтому $ (element) .attr ('onclick', null); работает для меня. metamagicson
Я обнаружил, что это лучшее, как удалить событие onlick, когда вы набрали его так.<span onlick="method()">sometext>/span> Событие полностью разбито и прекрасно работает zdarsky.peter
Я не думаю, что это лучший способ.jsfiddle.net/TN2wr противjsfiddle.net/TN2wr/1 Gus
15

если вы используете JQuery 1,7

$('html').off('click');

еще

$('html').unbind('click');
6

Это очень легко, используя removeAttr.

$(element).removeAttr("onclick");
205

Старый Путь (До 1,7):

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

Новый способ (1.7+):

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

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

// use the "[attr=value]" syntax to avoid syntax errors with special characters (like "$")
$('[id="a$id"]').prop('onclick',null).off('click');
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>


<a id="a$id" onclick="alert('get rid of this')" href="javascript:void(0)"  class="black">Qualify</a>

Разве это не должно быть removeAttr ('onclick')? Roatin Marth
@andyface да, это в документации, но мне пришлось использовать.prop() для IE11 тоже. onetwo12
Да, хорошая мысль, может быть чище, но я не уверен, что это будет отличаться с точки зрения исполнения. glmxndr
Смотрите первый комментарий на removeAttrapi.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
С jQuery 1.7+ вы можете использовать вкл / выкл:stackoverflow.com/questions/209029/... Lance Cleveland

Похожие вопросы