我有一个带有复杂"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"会将引用复制到函数中,这就是为什么我在调用时省略了括号。this.oninput()
(注括号)应该工作:
<input id="x" type="text" name="x"
oninput="console.log('test');" onfocus="this.oninput();"/>
http://jsfiddle.net/9kNrW/可以吗?
... onfocus="this.oninput()"
我认为没有办法将生成的代码外包为可以从两个事件处理程序调用的适当函数…
短答:
使用父级: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.
};