2010-04-13 31 views
30

Điều này có vẻ đơn giản.Bạn làm cách nào để ghi đè sự kiện onclick nội tuyến?

Làm thế nào để bạn ghi đè sự kiện onclick trong HTML sau bằng JavaScript?

<a id="sample" href="..." onclick="alert('hello world')" />...</a> 

Tôi đã thử nó với jQuery, nhưng điều đó không làm các trick:

$('#sample').attr('onclick','alert("done")') 

Giả HTML là trước bằng văn bản và không thể thay đổi, trừ thao tác nó với JavaScript.

Trả lời

41

Hãy thử điều này:

// Setting the DOM element's onclick to null removes 
// the inline click handler 
$("#sample")[0].onclick = null; 
$("#sample").click(function() { alert("done") }); 
+0

Đó là không rõ ràng, và nó đã làm việc. Cảm ơn Andrew. Tại sao [0]? –

+1

@Diodeus: Các đối tượng jQuery, giống như các bộ sưu tập hoặc mảng DOM, có các chỉ mục số cho mỗi phần tử được chứa. '[0]' sẽ tìm nạp phần tử phù hợp đầu tiên của bộ chọn. –

+0

Tôi sẽ giả sử vì tôi đang chọn bằng ID rằng nó sẽ là duy nhất và không bao giờ dẫn đến một mảng. Đôi khi những gì có vẻ hợp lý là .... sai. –

1

Hãy thử:

document.getElementById("sample").onclick = $.noop; 

$.noop == function(){}; 

jQuery noop

+1

này đã không làm việc một trong hai. –

+0

'$ (" # mẫu ") [0] .onclick = null;' và 'document.getElementById (" mẫu "). Onclick = $ .noop;' gần như giống hệt nhau. làm thế nào bạn có thể nói rằng điều này đã không làm việc? –

+0

Tôi đã thử nghiệm điều này và thấy rằng nó hoạt động cho mục đích của tôi (tôi đã không kiểm tra xem nó ghi đè thuộc tính, nhưng nó có thể làm) –

6
<a id="sample" href="..." onclick="alert('hello world'); return false;" />...</a> 

Hoặc

$('#sample').attr('onclick','alert("done"); return false;') 

Mặc dù có khả năng thiết lập các return false; hoặc trực tiếp trong onclick hoặc bằng cách sử dụng jQuery, nó không thực sự yêu cầu jQuery phải được sử dụng. Lợi ích là nếu vì lý do gì đó kịch bản jQuery của bạn dẫn đến một mã số 404, mã của bạn sẽ vẫn hoạt động.

Tôi đã tìm thấy câu trả lời here.

+0

+1 Điều này tốt hơn câu trả lời tôi đưa ra. :-) –

+1

Trả lại false không phải là vấn đề, và điều này không hoạt động. –

+0

Oh quả bóng, tôi nghĩ rằng tôi đã hoàn toàn hiểu lầm câu hỏi của bạn! Xin lỗi dude: S –

4

này cũng có thể được thực hiện mà không jQuery:

document.getElementById("sample").setAttribute('onclick','alert("done")'); 
Các vấn đề liên quan