根据另一个处理程序添加一个处理程序?

发布于 2024-11-27 00:32:44 字数 411 浏览 0 评论 0原文

我有一个带有复杂“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" 会将引用复制到函数,这就是为什么我在调用时省略了括号。

I have a tag with a complex "oninput" handler, e.g.

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

I want to add another handler that simply calls that one. My initial though was that this would work:

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

But it doesn't. What should I be doing? Thanks.

Edit: I thought that onfocus="this.oninput" would copy the reference to the function, that's why I left off the parentheses for a call.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

海螺姑娘 2024-12-04 00:32:44

this.oninput() (注意括号)应该有效:

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

http://jsfiddle.net/9kNrW /

this.oninput() (note parentheticals) should work:

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

http://jsfiddle.net/9kNrW/

临风闻羌笛 2024-12-04 00:32:44

这能行吗?

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

我认为没有办法将生成的代码外包为可以从两个事件处理程序调用的正确函数......

This could work?

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

I assume there's no way to have the generated code be outsourced as proper functions that you could call from both event handlers...

十年九夏 2024-12-04 00:32:44

简短回答:
使用括号: 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.
};

Short answer:
Use parens: onfocus="this.oninput();"

If oninput references this or the event object, you need to add a little more:

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

Explanation:
If you were attaching the event handlers in code, your syntax is correct. Because you are setting a function reference. Ie,

myInput.onfocus = myInput.oninput;

But, when attached in the markup, the code between the quotes actually is itself a function. Eg,

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

Is equivalent to:

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

So your code as written is the equivalent of:

document.getElementById("x").onfocus = function () {
    this.oninput; // returns a function reference.  Does not call the function.
};
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文