Làm cách nào để loại bỏ “onclick” bằng JQuery?


99

Mã PHP:

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

Tôi muốn xóa onclick="check($id,1)liên kết để không thể nhấp vào liên kết hoặc " check($id,1)sẽ không được kích hoạt. Làm cách nào để thực hiện với JQuery?

Câu trả lời:


237

Old Way (trước 1.7):

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

Cách mới (1.7+):

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

(Thay thế ... bằng bộ chọn bạn cần.)


26
Đó không phải là removeAttr ('onclick')?
Roatin Marth

Đúng, điểm tốt, có thể sạch hơn, nhưng tôi không chắc nó sẽ khác với quan điểm thực thi.
glmxndr

6
Với jQuery 1.7+, bạn có thể bật / tắt: stackoverflow.com/questions/209029/…
Lance Cleveland

6
Xem nhận xét đầu tiên trên 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

2
@andyface có trong tài liệu, nhưng tôi cũng phải sử dụng .prop()cho IE11.
onetwo12

58

Tôi biết điều này khá cũ, nhưng khi một người lạ bị lạc tìm thấy câu hỏi này để tìm câu trả lời (giống như tôi đã làm) thì đây là cách tốt nhất để làm điều đó, thay vì sử dụng removeAttr ():

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

Trích dẫn doku chính thức của jQuerys :

"Xóa trình xử lý sự kiện onclick nội tuyến bằng .removeAttr () không đạt được hiệu quả mong muốn trong Internet Explorer 6, 7 hoặc 8. Để tránh các sự cố tiềm ẩn, hãy sử dụng .prop () thay thế"


1
Tôi thấy rằng đây là cách tốt nhất để loại bỏ sự kiện onlick khi bạn đã nhập nó như thế này. <span onlick="method()">sometext>/span>Sự kiện này là hoàn toàn unbinded và hoạt động tuyệt vời
zdarsky.peter

3
Tôi không nghĩ đây là cách tốt nhất. jsfiddle.net/TN2wr vs jsfiddle.net/TN2wr/1
Gus

Tôi đang sử dụng JQ cũ hơn 1.6 do đó $ (element) .attr ('onclick', null); làm việc cho tôi.
metamagikum

18

Xóa onclicktài sản

Giả sử bạn đã thêm nội tuyến sự kiện nhấp chuột của mình, như sau:

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

Sau đó, bạn có thể xóa sự kiện như sau:

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

Xóa trình clicknghe sự kiện

Giả sử bạn đã thêm sự kiện nhấp chuột của mình bằng cách xác định trình xử lý sự kiện, như sau:

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

... hoặc như thế này:

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

Sau đó, bạn có thể xóa sự kiện như sau:

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

Loại bỏ cả hai

Nếu bạn không chắc chắn sự kiện của mình đã được thêm vào như thế nào, bạn có thể kết hợp cả hai, như sau:

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

17

nếu bạn đang sử dụng jquery 1.7

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

khác

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

10

Nó rất dễ dàng bằng cách sử dụng removeAttr.

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

5

Sau khi cố gắng rất nhiều với bind, unbind, on, off, click, attr, removeAttr, prop, tôi đã làm cho nó hoạt động. Vì vậy, tôi có tình huống sau: Trong html của tôi, tôi KHÔNG đính kèm bất kỳ trình xử lý onclick nội tuyến nào.

Sau đó, trong Javascript của tôi, tôi đã sử dụng phần sau để thêm trình xử lý onclick nội tuyến:

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

Để xóa điều này sau đó khỏi Javascript, tôi đã sử dụng như sau:

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

Đây là cách nó hoạt động để tôi liên kết và hủy liên kết các sự kiện nhấp chuột trong Javascript. Hãy nhớ KHÔNG chèn bất kỳ trình xử lý onclick nội tuyến nào vào các phần tử của bạn.


Tôi thích cái này, nhưng tại sao cái này lại là cái chống đỡ và cái khác?
Stachu

Tôi không chắc, nhưng theo cách tôi thấy điều này là với attr, bạn thêm / tiêm trình xử lý onclick với myFunction () tương ứng và prop ('onclick', null) sẽ xóa thuộc tính, vì vậy sẽ không có hàm nào được gọi. Đây là cách nó làm việc cho tôi. Và tôi có thể nhận thấy cách phần tử có trình xử lý onclick thông qua attr và cách nó bị xóa sau khi prop.
bboydflo

1
Để tham khảo trong tương lai, bạn thực sự cần được sử dụng .on('click', myFunction)(lưu ý rằng myFunctionkhông trong dấu ngoặc kép) và sau đó, sau này,.off('click')
JDB vẫn nhớ Monica

1

Điều gì sẽ xảy ra nếu sự kiện onclick không trực tiếp trên phần tử mà từ phần tử mẹ? Điều này sẽ hoạt động:

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

Việc thêm một trình nghe nhấp chuột khác (để tránh mặc định, v.v.) có thể thêm nó vào cuối danh sách trình nghe và do đó, những trình nghe khác sẽ vẫn được thực thi trước. Tôi không chắc liệu nó được thêm vào đầu tiên hay cuối cùng vào danh sách. Dù sao thì tốt hơn là sử dụng 'tắt' như đã thấy trong các câu trả lời khác.
Frederic Leitenberger

0

Hãy thử điều này nếu bạn hủy liên kết sự kiện onclick theo ID Sau đó sử dụng:

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

Hãy thử điều này nếu bạn hủy liên kết sự kiện onclick theo Lớp Sau đó sử dụng:

$('.className').attr('onclick','').unbind('click');
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.