我试图维护一个使用以下两行代码之一触发事件的小部件:
this.element.trigger('change'); // or...
stop: function (event, ui) { that.element.change(); }
改变'在代码中只出现4次,在上面的两种形式之一中。但是,我不知道这里发生了什么。在更改调用中没有事件处理程序,并且没有绑定,委托,打开或实时调用,因此外部设备可能会设置此项。任何人都可以填写我吗?这有什么文件吗?感谢。
答案 0 :(得分:2)
这两行代码只是使用两种不同的允许语法触发更改事件this.element
。
使用.trigger():
this.element.trigger('change');
或使用简写方法.change():
that.element.change();
您实际上可以将事件处理程序绑定到this.element
表示的元素以处理此事件。
在不知道您的插件的情况下,很难准确地回答您this.element
。
但是以自动完成插件为例。在这一个中,this.element
实际上是自动完成插件应用于的输入字段。如果更改事件被触发,就像在您的问题中所做的那样,您可以将事件处理程序绑定到输入,如下所示:
$('#myinput')
.autocomplete()
.bind('change', function() { });
现在,如果此插件依赖于jQuery UI Widget Factory,建议使用方法_trigger()
来触发事件而不是jquery .trigger()。
使用_trigger()将确保使用正确的上下文执行插件选项中定义的任何回调,并触发this.element
的事件(如上所述)。所以你可以:
$('#myinput')
.somePlugin({
change: function(e, someData) {
// "this" here will be `this.element´
}
})
.bind('change', function() { ... });
答案 1 :(得分:0)
答案结果很简单 - 没有事件处理程序,没有绑定/ etc调用,jQuery在幕后不执行任何操作,因此触发器调用什么也没做。我对它们进行了评论,并且小部件的行为完全相同。卫生署。