2012-02-24 83 views
1

我有一個鏈接點擊的JavaScript代碼:JavaScript插入函數

document.getElementById('giddy').onclick = function { 
     alert(this.href); 
    }; 

,我想它的功能部分分開......我有

document.getElementById('giddy').onclick = poro(this); 
    function poro(yyyy) { 
     alert(yyyy.href); 
    }; 

但不工作(說警報中未定義)...我做錯了什麼?

+0

你不分配onclick事件處理程序的函數,你正在調用函數poro並傳遞這個'this',這是*不*超鏈接對象。 – asawyer 2012-02-24 19:49:21

回答

2

你並不需要通過this作爲參數。當調用函數時,this將成爲該函數的上下文。你應該有:

document.getElementById('giddy').onclick = poro; 
function poro() { 
    alert(this.href); 
}; 
+0

這有效嗎?!!?如何知道poro是一個函數,如果它沒有()?在JS中使用 – David19801 2012-02-24 20:01:47

+1

,'()'執行該函數。函數可以作爲變量通過引用而不通過'()'來傳遞。 – Mathletics 2012-02-24 20:04:17

+0

函數poro(){...}等價於var poro = function(){...},這就是爲什麼這是有效的。 – Dave 2012-02-24 20:46:15

0

擺脫(this)並在功能中使用this而不是yyyy

document.getElementById('giddy').onclick = poro; 
function poro() { 
    alert(this.href); 
}; 
0

你立即調用poro功能。 實際上,您要告訴Javascript元素的onclick值將等於調用poro(this [window])函數的結果。

要解決這個問題,你可以包裝poro(this)功能的空函數裏面,像這樣:

document.getElementById('giddy').onclick = function(){poro(this)} function poro(yyyy) { alert(yyyy.href); }; 

您可能還需要考慮使用eventListener,因爲它允許擴展空間。

0

幾乎在那裏!你應該這樣做:

document.getElementById('giddy').onclick = function(){ poro(this); } 
function poro(yyyy) { 
    alert(yyyy.href); 
}; 

注意poro(this);包裝在一個匿名函數。

+0

我總是忘記他們被稱爲匿名函數......不知道爲什麼。 – 2012-02-24 19:51:23

+2

你爲什麼要爲此創建一個匿名函數?這完全忽略了JavaScript的一個主要優點(函數可以作爲變量傳遞)。 – Mathletics 2012-02-24 20:05:31

+0

同意的更好的解決方案。 – 2012-02-24 20:12:19

0

我推薦使用addEventListener代替onclick方法。

試試這個:

var giddy = document.getElementById('giddy'); 
giddy.addEventListener('click', function(e) { poro(this); }, false); 
function poro(yyyy) { 
    alert(yyyy.href); 
} 
+0

爲什麼addeventlistener而不是onclick?好點嗎? – David19801 2012-02-24 19:57:27

+0

請參閱此頁獲取更多信息:https://developer.mozilla.org/en/DOM/element.onclick 「只有一個onclick處理程序可以通過此屬性同時分配給一個對象。使用addEventListener方法,因爲它更加靈活,並且是DOM Events規範的一部分。「 – 2012-02-24 19:59:45

0

,因爲你正在使用jQuery的使用:

$('#giddy').click(function(){ poro($(this));}); 

,或者您可以使用bind()功能

$("#giddy").bind("click", $(this), poro);