2009-12-18 33 views
13

Tôi có một neo như thế nàyjquery ghi đè sự kiện

<a href='#' onclick='return showform(this)'>click me</a> 

Nhưng tôi muốn để có thể ghi đè lên các chức năng onclick, làm thế nào để làm điều này trong jquery?

vì nó có vẻ khi tôi thêm

$('a').click(function() { alert('hi there!'); }); 

handler nhấp chuột mới không được trọng cái cũ một

+0

tại sao click me? cấu trúc/nội dung và hành vi phải tách biệt. http://en.wikipedia.org/wiki/Unobtrusive_JavaScript – Wondering

+0

Tôi đã xóa chức năng onclick và dựa vào mọi thứ trên jquery vì nó có vẻ linh hoạt hơn theo cách đó ... Cảm ơn tất cả các bạn đã trả lời :) –

Trả lời

18

Các bạn đã thử một cái gì đó như thế này:

$("a").removeAttr("onclick"); 
+0

Bài cũ, nhưng đây chắc chắn là phương pháp đã làm việc cho tôi trong hàm ready() – htmlr

+0

Làm việc hoàn hảo cho tôi nữa! – KatharaDarko

10

Nếu bạn đang sử dụng jQuery như thế này, bạn không muốn bất cứ xử lý trong HTML . Bạn không thể xóa thuộc tính onClick?

Nếu bạn đang lo lắng về vi phạm thứ, tìm kiếm và thay thế vào lúc:

onclick='return showform(this)' 

và thay thế bằng

class='showform' 

Sau đó, bạn có thể làm:

$('a.showform').click(function (e) { 
    e.preventDefault(); 
    return showform(this); 
}); 

mà sẽ giữ các trình xử lý hiện có của bạn đang hoạt động.

22

Trong trường hợp của bạn, sự kiện onCick sẽ ghi đè lên sự kiện jQuery. Những gì bạn có thể có thể làm là:

$('a').unbind('click').click(function(){ 
    alert('why hello there children.'); 
}) 

Nhưng tôi tin rằng đây sẽ phải được đưa vào sau khi

<a href='#' onclick='return showform(this)'>click me</a> 

Điều đó nói rằng, bạn thực sự không nên sử dụng onClicks anyway ... nó làm cho mã thực sự khó duy trì và thay đổi (như bạn đã tìm thấy).

+0

Nếu bạn sau Yahoo, tất cả các kịch bản được bao gồm ở cuối trang anyway ... – Skilldrick

+0

Đó là sự thật, tôi figured tôi nên điểm rằng một phần ra mặc dù, như sự kiện onclick cuối cùng nên ghi đè phần còn lại không? – SeanJA

+0

Nó phụ thuộc khi $ ('a'). Unbind() được gọi. Nếu nó là $ (document) .ready() thì nó có thể nằm trong 'head' và vẫn hoạt động. – Skilldrick

0

Có một plugin cho nó, nhưng bạn chỉ nên làm điều này khi bạn thực sự cần. Plugin cho phép bạn gọi hàm gốc hoặc bỏ qua/thay thế nó hoàn toàn

jQuery Override Plugin

$(divElementObj).override('onclick', 'click', function(...)); 
Các vấn đề liên quan