2012-01-26 24 views
6

Tôi biết rằng đây là trường tiểu học, nhưng tôi hoàn toàn không thể chuyển "tham số" này làm tham số cho hàm JavaScript. Tôi tê liệt khi cố gắng ...Cách chuyển tham chiếu 'this' sang hàm javascript từ thẻ <a>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title>Untitled Document</title> 
<script language="javascript" type="text/javascript"> 
    function ko(control.id){ 
    alert(control); 
} 
</script> 

<body> 
<div id"lala"> 
    <a id="la" href="javascript:ko(this)" >Votes & Concerns</a> 
</div> 

</body> 
</html> 

Thông báo cho tôi biết "không xác định!"

+0

Chính xác thì bạn đang cố gắng làm gì? Bạn có muốn nó cảnh báo ("Bình chọn & quan tâm") không? Dù sao, bạn có thể bắt đầu bằng cách chuyển "la" dưới dạng chuỗi, sau đó getElementByID ("la") để lấy thẻ dưới dạng đối tượng DOM. – btown

+0

Tôi đang cố gắng sử dụng hệ thống phân cấp Dom để khám phá các ID của nhiều DIV trong màn hình. – DKean

Trả lời

11
<a id="la" href="#" onclick="ko(this); return false;" >Votes & Concerns</a> 
+0

Giải pháp của bạn là giải pháp duy nhất hoạt động! Kudos, nhưng chủ yếu là cảm ơn bạn. Nhưng xin vui lòng cho tôi biết những gì "return false;" nói về??? – DKean

+0

Tôi giả định rằng hàm javascript trả về cuộc gọi, nhưng cuộc gọi có thể trả về ở đâu ??? Tôi đã xóa trả về false; và nó vẫn hoạt động! Nhưng tôi là một người mới ... có lẽ tôi đang thiếu một cái gì đó ... – DKean

+3

Đối với các sự kiện nói chung nếu bạn 'trả về false;' nó sẽ ngăn chặn hành động mặc định của sự kiện này đi trước. Với một thẻ neo và một sự kiện nhấn, hành động mặc định là điều hướng đến 'href' được chỉ định - trong trường hợp này ori đã đặt thành" # "để nó nằm trên trang hiện tại nhưng nếu bạn không trả về' false' trình duyệt thường sẽ cuộn trở lại đầu trang hiện tại. – nnnnnn

3

Bạn đã nhận nó một cách sai lầm tròn:

function ko(control){ 
    alert(control.id); 
} 

control là đối tượng (đối tượng phần tử DOM, để được chính xác) mà bạn đang đi qua với ko(this). Sau đó, bạn muốn truy cập thuộc tính id của mình với control.id.


NB cũng có nhiều cách tốt hơn để thực hiện việc này. Tốt nhất là gán các trình xử lý sự kiện trong các khối Javascript thay vì trong các thuộc tính HTML. Ví dụ:

document.getElementById('la').onclick = function() { 
    alert(this.id); 
}; 
+0

lý do tôi làm điều này là để có được ID của DIV bên ngoài, thực sự. Giá trị id 'la' không thể được biết, nhưng bằng cách kiểm tra. Vì vậy, tôi không sử dụng lệnh "getElementById". – DKean

+0

@ DennisKean Nếu đó là 'div' đầu tiên trong tài liệu, bạn có thể sử dụng' document.getElementsByTagName ('div') [0] .onclick = ... 'Có gần như chắc chắn là một giải pháp cho phép bạn tách JS khỏi HTML . – lonesomeday

+0

Nó không thực sự tách biệt nếu JS không hoạt động mà không biết cấu trúc và/hoặc id của html. – nnnnnn

4

Đừng làm điều đó từ giá trị "href", làm điều đó từ một thuộc tính xử lý sự kiện thực tế:

<a id='la' href='#' onclick='ko(event, this)'> 

đèo trong event để bạn có thể ngăn chặn việc giải thích mặc định nhấp chuột vào một số <a> do trình duyệt thực hiện.

function ko(event, element) { 
    if ('preventDefault' in event) event.preventDefault(); 
    event.returnValue = false; // for IE 

    // here "element" will refer to the clicked-on element ... 
} 
+0

Tôi nhận được kết quả tương tự như tôi đã nhận được ban đầu. "chưa xác định!" – DKean

+0

Xin lỗi - Tôi sẽ mở rộng câu trả lời; điều này thực sự nên làm việc tuy nhiên. – Pointy

+0

hãy thử và cho tôi biết nếu bạn nhận được kết quả khác ... – DKean

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