Як видалити "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?

Відповіді:


238

Старий шлях (до 1,7):

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

Новий шлях (1.7+):

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

(Замініть ... потрібним вам селектором.)


26
Чи не повинен це бути RemoveAttr ('onclick')?
Roatin Marth

Так, хороша точка, може бути чистішою, але я не впевнений, що це було б інакше з точки зору виконання.
glmxndr

6
За допомогою jQuery 1.7+ ви можете використовувати ввімкнення / вимкнення: stackoverflow.com/questions/209029/…
Lance Cleveland

6
Дивіться перший коментар на deleteAttr 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

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
Gus

Я використовую JQ старший 1,6, тому $ (елемент) .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

17

якщо ви використовуєте jquery 1.7

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

ще

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


5

Після настільки важких спроб прив’язати, відв’язати, увімкнути, вимкнути, натиснути, attr, RemoveAttr, prop, я змусив його працювати. Отже, у мене є такий сценарій: У своєму HTML я не додав жодних вбудованих обробників onclick.

Потім у своєму Javascript я використав наступне, щоб додати вбудований обробник onclick:

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

Щоб видалити це згодом з Javascript, я використав наступне:

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

Це так, як для мене працювали, щоб зв'язувати та відв'язувати події клацання динамічно в JavaScript. Не забудьте НЕ вставляти будь-який вбудований обробник onclick у ваші елементи.


Мені це подобається, але чому один буде проп, а інший attr?
Стаху

Я не впевнений, але, як я бачу, це те, що за допомогою attr ви додаєте / впорскуєте обробник onclick з відповідним myFunction () і опора ('onclick', null) видаляє атрибут, тому жодна функція не буде викликана. Це так, як це працювало для мене. І я міг помітити, як цей елемент мав обробник onclick через attr і як його видаляли після опори.
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;
});

Додавання іншого слухача кліків (для запобігання замовчуванню тощо) може додати його до кінця списку слухачів, і тому інші слухачі все одно будуть виконані першими. Я не впевнений, хоча це буде додано першим чи останнім до списку. У будь-якому випадку краще використовувати "вимкнено", як це видно в інших відповідях.
Фредерік

0

Спробуйте це, якщо від’єднати подію onclick за ідентифікатором. Потім скористайтеся:

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

Спробуйте це, якщо ви від’єднаєте подію onclick по класу. Потім використовуйте:

$('.className').attr('onclick','').unbind('click');
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.