2009-09-12 42 views
27

Có thể lấy giá trị hiện tại của thuộc tính onClick của thẻ A qua jQuery không?nhận giá trị của "onclick" với jQuery?

Ví dụ, tôi có:

<a href="http://www.google.com" id="google" onclick="alert('hello')">Click</a> 

Tôi muốn lấy mã onclick vì vậy tôi có thể lưu nó để sử dụng sau (như tôi sẽ thay đổi sự kiện onclick cho một thời gian ngắn).

Có thể làm điều gì đó như:

var link_click = $("#google").onclick; 

hay:

var link_click = $("#google").click; 

Vì vậy mà sau này trong mã của tôi, tôi có thể nộp đơn lại rằng mã, hoặc eval() nó nếu cần thiết ?

Trả lời

44

tôi chưa bao giờ làm điều này, nhưng nó sẽ được thực hiện như thế này:

var script = $('#google').attr("onclick") 
+1

Bạn có thể lấy thuộc tính onclick. Nhưng không phải luôn luôn trình xử lý sự kiện nhấp chuột. –

12

mkoryak là đúng.

Nhưng, nếu các sự kiện bị ràng buộc với nút DOM đó bằng cách sử dụng các phương pháp hiện đại hơn (không sử dụng onclick), thì phương pháp này sẽ không thành công.

Nếu đó là những gì bạn thực sự muốn, hãy xem this question và câu trả lời được chấp nhận của nó.

Chúc mừng!


Tôi đã đọc lại câu hỏi của bạn.
Tôi muốn cho bạn biết điều này: không sử dụng onclick, onkeypress và các lượt thích ràng buộc sự kiện.

Sử dụng phương pháp tốt hơn như addEventListener() sẽ cho phép bạn:

  1. Thêm nhiều hơn một xử lý sự kiện cho một sự kiện cụ
  2. loại bỏ một số thính giả chọn lọc

Thay vì thực sự sử dụng addEventListener(), bạn có thể sử dụng các trình bao bọc jQuery như $('selector').click().

Chúc mừng lần nữa!

11
$('#google').attr('onclick') + "" 

Tuy nhiên, Firebug cho thấy điều này trả về hàm 'onclick'. Bạn có thể gọi hàm sau này sử dụng phương pháp sau đây:

(new Function ($('#google').attr('onclick') + ';onclick();'))() 

... hoặc sử dụng một RegEx tước function và chỉ nhận được các báo cáo bên trong nó.

+0

điều này thật tuyệt! bạn có thể giải thích nó hoạt động như thế nào không? –

+0

$ ('# google') attr ('onclick') giữ giá trị của thuộc tính 'onclick' (là một chuỗi). Tuy nhiên, bởi vì các trình duyệt xử lý các thuộc tính sự kiện theo một cách khác, chúng được trả về với "function onclick() {alert ('hello')}". Vì vậy, nếu bạn muốn gọi trực tiếp hàm, bạn sẽ phải tách 'function() {}' hoặc gọi nó ngay lập tức. –

0

Bạn có thể giải thích chính xác những gì bạn cố gắng thực hiện không? Nói chung, bạn KHÔNG BAO GIỜ phải nhận thuộc tính onclick từ các phần tử HTML. Ngoài ra, bạn không nên chỉ định onclick trên chính phần tử đó. Thay vào đó đặt onclick động bằng cách sử dụng JQuery.

Nhưng theo như tôi hiểu bạn, bạn cố gắng chuyển đổi giữa hai hàm onclick khác nhau. Điều gì có thể tốt hơn là thực hiện chức năng onclick của bạn theo cách mà nó có thể xử lý cả hai tình huống.

$("#google").click(function() { 
    if (situation) { 
     // ... 
    } else { 
     // ... 
    } 
}); 
4

Tôi không khá chắc chắn làm thế nào để làm điều này trong jQuery ... nhưng công trình này:

var x = document.getElementById('google').attributes; 
for (var i in x) { 
if (x[i].name == "onclick") alert(x[i].firstChild.data); 
} 

nhưng cũng giống như Harshath nói nó sẽ là tốt hơn nếu bạn sử dụng event listeners, như loại bỏ và thêm chức năng này trở lại vào sự kiện onclick có thể rắc rối.

12

này làm việc cho tôi

var link_click = $('#google').get(0).attributes.onclick.nodeValue; 
console.log(link_click); 
+0

Đây là câu trả lời cần thực hiện nếu bạn thực sự cần truy cập vào văn bản của thuộc tính onclick chứ không phải các chức năng hoặc sự kiện bị ràng buộc. Tuy nhiên, bạn nên thay thế .get (0) .attributes.onclick.nodeValue bằng .get (0) .attributes.onclick.value vì nodeValue không được dùng nữa. –

Các vấn đề liên quan