2012-08-05 107 views
0

我結合像這樣的事件,使用原型JS:如何立即觸發事件?

$('country').observe('change',function(e) { ... }); 

怎麼能有一次我立刻火了?

jQuery中

,我只是釘在一個.triggerHandler('change')。原型中有類似的東西嗎?

+0

你的意思做,立馬?只要頁面加載? – 2012-08-05 18:37:34

+0

@NoahPassalacqua:沒有。立即立即。如在該行的代碼被擊中時。它在HTML元素下面,所以我知道它已經存在。 – mpen 2012-08-05 18:44:37

回答

1

使用load事件。事情是這樣的:

// calls addListeners when the document loads 
Event.observe(window, 'load', addListeners, false); 

function addListeners() { 

    // called onLoad 
    fireOnce(); 

    // observer for the country dropdown 
    $('country').observe('change', function(event) { 
     fireOnChange(); 
    }); 
} 

function fireOnce() { 
    // do something 
} 

function fireOnChange() { 
    // do something 
} 

當文檔載入,fireOnce()將執行。我一直都在使用這種技術。

+1

我希望我可以發射匿名函數....這有點矯枉過正。 – mpen 2012-08-05 18:51:25

1

如果使用的擴展是一個選項,我曾在過去的成功與event.simulate用於這一目的。

它會允許你這樣做:

$('country').simulate('change'); 
1

試試這個:

var handler = function(e) {...}; 
$("country").observe("change",handler); 
handler(); 

或者(少可讀,避免臨時變量):

$("country").observe("change",(function(e) { ... return arguments.callee;})()); 

然而,在這兩種情況下,你將無法使用this正如您所料。此解決方案更適合於更普遍的回調,如setInterval

+0

我目前正在使用前一種方法...'arguments.callee'已被棄用,不是嗎? – mpen 2012-08-06 00:40:49

0

...如果您知道它存在,並且您知道您並未等待頁面加載或等待腳本加載,爲什麼不只是:

(function (el) { 
    if (!el) { return; } 
    doSomething(el); 
}(document.getElementById("country"))); 
+0

,它會一次只觸發一次..其中的變化事件? – mpen 2012-08-06 00:39:17

+0

@Mark在之後添加它 - 或將此調用包含在您的函數定義中。你正在做兩件事:1)初始化你的代碼並追加一個監聽器。 2)處理後續變化因此,這樣對待它。即使這意味着定義'handleChange'功能,那麼'change'監聽器連接到你的對象,然後自動調用'handleChange'功能首次採用我寫了格局。然後,您不必爲了試圖將初始化處理過程鎖定到您的通用偵聽器中而撓頭,反之亦然。 – Norguard 2012-08-06 07:38:01