原始代码:
this.control.addEventListener('click', $.proxy(function() {
this.time.hashours = (this.duration() / 3600) >= 1.0;
this.time.duration.text(getTime(this.duration(), this.controls.time.hasHours));
this.time.current.text(getTime(0, this.controls.time.hasHours));
}, this));
尝试跨浏览器支持:
$(this.control).bind('click', $.proxy(function(e) {
var o = e.delegateTarget;
o.time.hashours = (o.duration() / 3600) >= 1.0;
o.time.duration.text(getTime(o.duration(), o.controls.time.hasHours));
o.time.current.text(getTime(0, o.controls.time.hasHours));
}, this));
即使使用代理,由于jQuery的自定义事件模型,它的上下文不再属于调用对象。如何获取原始this.control
?
答案 0 :(得分:2)
即使使用代理,由于jQuery的自定义事件模型,它的上下文不再属于调用对象。
我不认为jQuery的自定义事件模型是这里的问题。代理回调函数时,this
值应引用包含control
的根对象以及原始示例中的ctime
和time
等其他属性。< / p>
换句话说,不要试图从delegateTarget
var o = e.delegateTarget;
o.time.hashours = (o.duration() / 3600) >= 1.0;
...
但只是坚持原始代码,
this.time.hashours = (this.duration() / 3600) >= 1.0;
查看与您的结构类似的最小example。
答案 1 :(得分:0)
我不确定这是否能回答您的问题,但jQuery的自定义事件对象包含原始事件。它可以这样访问:e.originalEvent
其中e
是jQuery事件。
另外,仅仅是FYI,从jQuery 1.7开始,.on
方法优先于.bind
,请参阅:http://api.jquery.com/bind/
答案 2 :(得分:0)
如果你想在this.control
事件处理程序中使用click
,那么你应该这样做。
var $context = this;
$(this.control).bind('click', function(e) {
//You can use $context here
//var o = e.delegateTarget;
$context.time.hashours = ($context.duration() / 3600) >= 1.0;
$context.time.duration
.text(getTime($context.duration(), $context.controls.time.hasHours));
$context.time.current.text(getTime(0, $context.controls.time.hasHours));
//And this will point to this.control on which the event is triggered
});