2011-07-31 52 views
1

我有一個複雜的「oninput」處理程序的標籤,例如根據另一個添加一個處理程序?

<input id="x" type="text" name="x" 
    oninput="lotsofgeneratedcocde...."/> 

我想添加另一個處理程序,只是簡單地調用那個。我最初雖然是這樣的:

<input id="x" type="text" name="x" 
    oninput="lotsofgeneratedcocde...." onfocus="this.oninput"/> 

但它沒有。我該怎麼做?謝謝。

編輯:我認爲onfocus =「this.oninput」會複製該函數的引用,這就是爲什麼我放棄了呼叫的括號。

+0

是否'this.oninput()'不工作? –

+0

http://jsfiddle.net/9kNrW/ –

+0

@Jared它確實:http://jsfiddle.net/pQVfy/ –

回答

2

這可行嗎?

... onfocus="this.oninput()" 

我認爲沒有辦法有生成的代碼外包作爲,你可以從兩個事件處理函數調用適當的功能...

+0

如果它在同一個元素中,'this.oninput()'可以工作。 http://jsfiddle.net/9kNrW/ –

+0

@Jared:對,我得出了同樣的結果。但你的答案更快。所以tpdi,如果你不得不在Jared和我之間做出選擇,請接受Jared的回答。我會爲了正確的目的而更新。 – emboss

+0

我不知道你需要改變你的答案(因爲它沒有錯),它只是一個更詳細的做同樣事情的例子。 –

4

this.oninput()(注括注)應該工作:

<input id="x" type="text" name="x" 
     oninput="console.log('test');" onfocus="this.oninput();"/> 

http://jsfiddle.net/9kNrW/

1

簡短的回答:
使用括號:onfocus="this.oninput();"

如果oninput引用this或事件對象,你需要增加更多的一點:

onfocus="this.oninput.call(this, event);" 

說明:
如果你在代碼附加事件處理程序,您的語法是正確的。因爲你正在設置一個函數引用。即,

myInput.onfocus = myInput.oninput; 

但是,當附加在標記中時,引號之間的代碼實際上本身就是一個函數。例如,

<span id="foo" onclick="alert('hello world');" /> 

等同於:

document.getElementById("foo").onclick = function() { 
    alert('hello world'); 
}; 

所以,你的代碼寫的是等價的:

document.getElementById("x").onfocus = function() { 
    this.oninput; // returns a function reference. Does not call the function. 
}; 
+0

我懷疑是這種情況,但我並不確定我確實知道這一點。 –

相關問題