是否附加 onchange 对象为闭包
Is attaching an onchange object a closure?
我在这里,这里和这里搜索了以前的SO帖子,但无法找到对我来说有意义的答案。 这应该是一个基本问题,但我不明白我找到的帖子。 他们似乎没有使用 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
但在我看来,这将导致这个元素(注意缺少这个参数)
<input type="button" onchange="handleButtonOnChange">ClickMe</input>
如果我使用下面的行,这不会闭包吗,并且"this"将引用对象分配给 .onchange 属性时的事件,而不是更改事件时的事件?
//Does the line below make a closure?
MonthSelect.onchange=handleDayChange(this); //<-- What does 'this' refer to?
我是一个相对较新的网络程序员,但长期是Delphi程序员。 闭合仍然让我头疼。 我感谢这方面的任何帮助。
另外,我在这里阅读了有关使用 addEventListener 和旧版 IE 的问题,页面上的最后一篇文章提供了一个解决方法。 但我不明白它是如何工作的。
编辑 -- 那么传递其他参数呢? 似乎许多事件处理程序都需要具有特定于附加元素的参数。 似乎无法添加具有任何参数的侦听器。
闭包,如果你在JS中创建元素,如你所示:
var DaySelect = document.createElement("select");
DaySelect.id = ParentID+"-day";
DaySelect.disabled = true;
MonthSelect.onchange=function(){handleDayChange(DaySelect);};
Parent.appendChild(DaySelect);
由于函数是在创建元素的作用域内创建的,因此相同的变量将可供其使用。
编辑:
可以使用此方法传递其他参数,例如,我们作为处理程序创建和附加的匿名函数仍将向其发送事件对象:
function(e){handleDayChange(DaySelect, e);};
在事件对象中,您将有权访问事件目标,但在您的示例中,事件目标和"this"不是同一个元素,因此处理程序无法知道 DaySelect 元素。
jQuery使许多事件处理变得更加简单,这是许多人使用它的原因之一,它还规范了各种浏览器之间的方法,因此您不必编写相同代码的多个版本(在大多数情况下)
- 为什么 Google 闭包编译器会重命名对象的属性名称
- JSHint 错误“对象不支持此属性或方法”用于 javascript 闭包
- Javascript对象/闭包
- 使用闭包编译器编写更好的面向对象JavaScript完整示例代码
- 对象的闭包编译器问题
- JavaScript中带有构造函数的对象和闭包之间的区别
- 如何在 Google 闭包编译器中指定对象类型的@param @return
- Google 闭包编译器中的“全局此对象的危险使用”警告
- 这个 getter-setter 闭包是否有充分的理由以这种方式在其内部对象中声明它是私有的
- 测试对象是否是 Google 闭包类框架中接口的实现
- 如果闭包的行为类似于对象,它们是对象吗?(好像不像)
- JavaScript闭包:在对象中动态存储组失败
- 如何强制 Google 闭包编译器重命名方法,即使使用对象也是如此
- 仅在闭包中定义的模拟/存根对象
- 对闭包内对象的赋值的行为类似于指针
- 从 JavaScript 闭包中访问对象的值
- JQuery 通过闭包绑定到对象方法
- Javascript中对象和闭包的有趣和奇怪的行为
- Javascript 闭包(使用参数名称在同一函数中定义对象)
- 闭包对象创建:这两种方法的优点/缺点是什么