2016-06-13 20 views
-1

我對下拉列表中的onchange事件有疑問。 我一直在做一些閱讀,發現處理更改事件的首選方法是:在javascript中爲事件分配函數

select.onchange = function(){animateMarker()}; 

我只是想知道爲什麼它不能僅僅是:

select.onchange = animateMarker(); 

什麼animateMarker()之前的函數()在做什麼?

謝謝。

+0

[將onclick事件分配給函數]可能重複(http://stackoverflow.com/questions/3740761/assign-onclick-event-to-function) – Rajesh

回答

3

你可以這樣做:

select.onchange = animateMarker; 

添加()立即執行的功能,消除他們意味着你要指定的功能,事件處理程序,因此,這將是最終執行。

並回答最後一部分:包裝animateMarker的函數(){}是不必要的,它只是一個匿名函數,在調用函數時會執行該函數。

+1

*「...,刪除它們意味着 - 」* - 您將該功能分配給事件處理程序,以便最終執行該功能。這可能是一個更好的方式來做到這一點。 – deceze

+0

謝謝@deceze我已更新您的建議。 – MrWillihog

0

正如@mrwillihog說,你可以直接用它的定義賦予它像select.onchange = animateMarker;但明智的做法是使用包裝的功能,因爲這樣做,你可以將其插入包裝函數後來到onchange事件添加更多的功能建議。否則,您將僅限於animateMarker事件...或者...您可能需要重新定義animateMarker並執行一些醜陋的猴子補丁。所以最好使用包裝函數。

+0

1)如果你想添加更多的事件監聽器,那麼你可以添加一個函數包裝器。 2)無論如何,您應該使用'addEventListener',而不是直接覆蓋事件處理程序屬性的原因。 – deceze

相關問題