2009-03-06 30 views
21
<a href="" id="someId" onclick="SomeMethod(self);"></a> 

đâu SomeMethod có thể có:Javascript: Làm thế nào để thực hiện một kiểm soát gửi chính nó trong một phương pháp

function SomeMethod(item) 
{ 
    item.setAttribute('name', item.id); 
} 

Thay vì:

function SomeMethod(itemId) 
{ 
    var someItem; 

    someItem = document.getElementById(itemId); 
    someItem .setAttribute('name', someItem .id); 

} 

dụ Silly, nhưng ý tưởng không gửi là trong chính id, nhưng điều khiển thực tế gọi phương thức. Tôi thề rằng điều này có thể được thực hiện nhưng không có may mắn tìm kiếm ... một phần vì tôi thậm chí không chắc chắn những gì để tìm kiếm trên.

Tôi nghĩ đó là bản thân, nhưng bản thân dường như không phải là thứ tôi muốn khi kịch bản tôi chạy.

Trả lời

29

Sử dụng từ khóa this.

<a href="" id="someId" onclick="SomeMethod(this);"></a> 
+2

Tôi biết đó là điều đơn giản. Loại cảm thấy bẩn thỉu hỏi nhưng oh tốt. –

5

tôi có xu hướng sử dụng phương pháp này trong tất cả các chức năng cuộc gọi từ các thuộc tính HTML: -

onclick="SomeMethod.call(this)" 

Sau đó, trong javascript làm: -

function SomeMethod() 
{ 
    this.setAttribute('name', this.id); 
} 

này có một lợi thế rõ rệt khi bạn cũng có thể gán trực tiếp cho các thuộc tính xử lý sự kiện trong mã Javascript: -

document.getElementById("someID").onclick = SomeMethod 

Nếu SomeMethod mất các yếu tố bối cảnh như một tham số nó sẽ rất khó khăn khi phải thiết lập: -

function(id) { 
    var elem = document.getElementById(id) 
    elem.onclick = function() { SomeMethod(elem); } 
}("someID"); 

Tệ hơn nữa đây sẽ là bộ nhớ bị rò rỉ đóng cửa.

11

Bạn thực sự không cần phải vượt qua này như một đối số chức năng của bạn, bởi vì bạn đã có một nhấp chuột sự kiện đối tượng mà bạn có thể truy cập. Vì vậy:

<a href="" id="someId" onclick="clickEventHandler()"></a> 
<script> 
function clickEventHandler(event) { 

    if (!event) { 
     event = window.event; // Older versions of IE use 
           // a global reference 
           // and not an argument. 
    }; 

    var el = (event.target || event.srcElement); // DOM uses 'target'; 
               // older versions of 
               // IE use 'srcElement' 
    el.setAttribute('name', el.id); 

} 
</script> 
0

Tại thời điểm này: SomeMethod(this) - this lợi nhuận đối tượng cửa sổ do đó, không sử dụng nó. Cách đúng để sử dụng từ khóa this làm cho ngữ cảnh phù hợp, vì vậy hãy sử dụng SomeMethod.call(this).

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