2012-09-04 19 views
0

我有一個功能,這樣撥打:的onclick使用參數

menu[0].onclick = function() { 
    filters.reset_all(); 
    clients.get(); 
} 

所以它被稱爲當第一個菜單元素用戶點擊。現在我需要調用它形成的其他地方,我所做的是這樣的:

if (li.onclick) { //li and menu[0] above are the same 
     li.onclick.call(); 
    } 

,而且運作良好。

但現在我需要通過一些參數onclick函數。我試過這個.call(some_param);,但是onclick中的arguments數組是空的。

我在做什麼錯?

編輯:變成這樣:

menu[0].onclick = function(arg) { 
    console.log(arg); 
    filters.reset_all(); 
    clients.get(); 
} 

li.onclick.call(li,param); 

仍然沒有

+0

爲什麼不叫'li.onclick() '直接? –

+0

更改爲'li.onclick(param)',但仍然無法訪問 – k102

+0

,這是因爲原始簽名不接受任何參數('function()')。請參閱[** jfriend00 **的答案](http://stackoverflow.com/a/12259656/547020)以獲取更多語義方法。 –

回答

1

應該

call(object, param1, param2, param3...); 

你的情況,你可以寫

li.onclick.call(li, param1); 
+1

OP所要做的事情沒有任何意義,因爲當通過真正的點擊調用li.onclick()時,事件對象會替代'param1',所以該函數中的代碼不能使用'param1可靠。 – jfriend00

3

的第一個參數.call()對於this指針的值。第二,第三等...參數傳遞給函數。如果您明確嘗試設置this指針,則只需使用.call()。否則,您可以直接調用功能li.onclick()

事件處理程序通常由系統調用,當發生這種情況時,它們將作爲第一個參數傳遞給事件對象。如果你想要一個可以使用不同參數的函數,你應該爲它創建自己的函數,而不是使用事件處理函數。如果需要,您的事件處理程序也可以調用此其他函數。

menu[0].onclick = function() { 
    myFunc("aaa"); 
} 

function myFunc(arg1) { 
    // do whatever here 
    filters.reset_all(); 
    clients.get(); 
} 

if (li.onclick) { 
    myFunc("bbb"); 
} 
1

call()第一個參數是(在這種情況下this)的參數的其餘部分進入參數數組中的順序的上下文。如果您使用apply(),而不是通話,那麼你只有兩個參數:apply(this, arguments_array)