JS - 无法在自定义事件的处理程序中将其指向调用方
JS - Cant get this to point to callers this in handler of custom event
标题可能措辞不正确。基本上,我正在使用自定义事件处理程序进行测试,并达到了它们正在工作的地步,但是事件处理程序指向ControlClientSide而不是触发事件的项。
下面的代码将阐明所有内容:
function ControlClientSide()
{
this.CheckBoxClicked = function(e) { }
this.Configure = function() {
$('#checkBox100').change(function(e) { $(this).trigger("CheckBoxClicked"); }.bind(this));
};
this.Configure();
};
var x = new ControlClientSide();
$(x).on("CheckBoxClicked", function(e) { alert( /* $(this).val() + */ ' Hi'); })
.on("CheckBoxClicked", function(e) { alert( /* $(this).val() + */ ' Hi2'); });
在两个处理程序中,我试图将这一点指向实际的复选框项。目前它指向ControlClientSide。谁能建议我错过了什么?
请参阅以下 JSFIDDLE:http://jsfiddle.net/KC5RH/3/
如果要访问触发事件的复选框,只需将其作为附加参数传递到triggerHandler
调用中即可。 此外,删除您的.bind(this)
调用,在这种情况下不需要它:
function ControlClientSide()
{
this.CheckBoxClicked = function() { }
var thisControl = this;
this.Configure = function() {
$('#checkBox100').change(function() { $(thisControl).triggerHandler("CheckBoxClicked", this);});
};
this.Configure();
};
然后,您可以通过侦听器中的参数访问该元素:
$(x).on("CheckBoxClicked", function(obj, arg) { alert( $(arg).attr("id") + ' Hi'); })
.on("CheckBoxClicked", function(obj, arg) { alert( $(arg).attr("id") + ' Hi2'); });
请参阅小提琴以获取完整的工作解决方案:http://jsfiddle.net/85qdH/4/
您使用 .bind(this)
将其显式绑定到对象。此外,您正在将对象设置为侦听事件,而不是 DOM 节点。因此,您需要删除bind(this)
部件。
然后,使用 trigger
而不是 triggerHandler
让事件在 DOM 上冒泡,以便可以使用委派来捕获它:
function ControlClientSide()
{
this.CheckBoxClicked = function() { }
this.Configure = function() {
$('#checkBox100').change(function() {
$(this).trigger("CheckBoxClicked");
});
};
this.Configure();
};
var x = new ControlClientSide();
$(document).on("CheckBoxClicked", "input", function() { console.log(this); alert(this.id); })
http://jsfiddle.net/KC5RH/9/
相关文章:
- 如何从Java/scala调用js美化程序
- 如何远程检查JavaScript应用程序的函数调用堆栈
- 在同一个javascript事件处理程序中调用不同的函数
- 为什么这个函数调用会破坏程序并导致未定义的变量
- Sinon Spy不使用Javascript调用或应用程序
- 未为路由器应用程序调用Node.Js的回调
- 无法在Windows 10 Cordova应用程序中从Web视图进行ajax调用
- 为什么没有调用我的流错误处理程序
- 使用jquery调用vaadin应用程序表单php
- 向调用全局javascript函数的对象添加处理程序
- Angular.js指令格式化程序只调用过一次,或者如何告诉ngModel表现得像watchCollection
- 直接在DOM事件处理程序中调用作用域函数的最短方法是什么
- 如何使应用程序加载独立于web服务调用
- 当调用JS函数具有alert()时,应用程序将被冻结
- Backbone应用程序中的多个jQueryAjax调用会混淆数据
- 从node.js应用程序调用Mongoose Model.save()时挂起
- 如何在启动时在PhoneGap应用程序中调用一些Objective C代码
- 在调用程序中获取函数从文件中读取的值:Windows应用商店JavaScript应用程序
- 如何在android webview中调用程序员定义的javascript函数
- 将此函数中的范围更改为使用 jquery 或 vanilla JavaScript 的调用程序