【发布时间】:2016-04-19 02:59:38
【问题描述】:
我搜索过之前的 SO 帖子 here、here 和 here,但找不到对我有意义的答案。这应该是一个基本问题,但我不理解我找到的帖子。他们似乎没有使用 this 参数来解决。
我想以编程方式添加一个带有 onchange 事件的输入,这样最终结果是这样的:
<input type="button" onchange="handleButtonOnChange(this)">ClickMe</input>
我正在开发一个在旧的 Delphi 应用程序中使用嵌入式 IE6 浏览器的项目,所以我必须有一个兼容 IE6 的解决方案(是的,IE6 很糟糕,但我坚持使用它是有原因的现在)。
我最初的尝试是这样的:
var DaySelect = document.createElement("select");
DaySelect.id = ParentID+"-day";
DaySelect.disabled = true;
MonthSelect.onchange="handleDayChange(this);" //<--- not correct
Parent.appendChild(DaySelect);
然后我读到 .onchange 应该被分配一个对象,而不是一个字符串,并且应该使用它来代替:
MonthSelect.onchange=handleDayChange; //<--- '(this)' removed
但在我看来,这会导致这个元素(注意缺少 this 参数)
<input type="button" onchange="handleButtonOnChange">ClickMe</input>
如果我使用下面的行,那么 this 不会关闭,并且“this”将引用对象分配给 .onchange 属性时的事件,而不是在更改事件的时间?
//Does the line below make a closure?
MonthSelect.onchange=handleDayChange(this); //<-- What does 'this' refer to?
我是一个相对较新的 Web 程序员,但长期从事 Delphi 程序员。关闭仍然让我头疼。感谢您在这方面的任何帮助。
另外,我阅读了here 关于使用 addEventListener 和旧版本 IE 的问题,页面上的最后一篇文章提供了解决方法。但我不明白它是如何工作的。
编辑——那么传递其他参数呢?似乎许多事件处理程序需要具有特定于附加元素的参数。似乎无法添加带有任何参数的侦听器。
【问题讨论】:
-
在你的例子中“this”应该指向输入元素吗?
-
我希望能够让多个元素使用同一个 javascript 处理程序。所以我的想法是处理程序需要传递创建事件的元素。所以是的,“this”将是发起调用的元素。
-
在您上一个代码/评论问题中,
this指的是全局window对象(如果从全局 js 上下文调用)。同样在该代码行中,您将属性分配给函数的返回值,而不是函数本身。您正在那里调用该函数。 -
MonthSelect.onchange="handleDayChange(this);"或DaySelect.onchange="handleDayChange(this);"? -
@JuanMendes 你是对的。那是一个让我感到困惑的错误。就在我读到你的帖子之前,我抓住了它。我应该早点回来检查。谢谢!
标签: javascript html internet-explorer-6 onchange createelement