1

我试图更好地理解 jQueryUI 插件的事件,例如http://api.jqueryui.com/autocomplete/

例如,我有 select( event, ui ) 事件。根据文档,这两位代码似乎是相同的。正确的?

$( ".selector" ).autocomplete({
  select: function( event, ui ) {}
});

( ".selector" ).on( "autocompleteselect", function( event, ui ) {} );

好的,我想两者都将“autocompleteselect”事件的事件处理函数附加到所选元素。该文档还将“选择”事件的“类型”显示为“自动完成选择”。但我认为事件名称是“选择”。是“选择”还是“自动完成选择”?请注意,我首先尝试浏览 jQueryUI 源代码,但从未使用过字符串“autocompleteselect”。“自动完成选择”在哪里定义?

我的下一个困惑来源是当我将代码放入与事件关联的匿名函数中时。此代码是否总是首先执行,然后是与偶数执行相关的任何其他默认插件代码?还会event.preventDefault();阻止默认行为吗?

4

2 回答 2

3

这是小部件工厂添加的功能。当使用_trigger触发事件时,它实际上会触发类型为 的事件widget name + type

例如:如果您正在创建一个带有名称的小部件mywidget并在小部件中触发一个事件,就像this._trigger('select')实际触发的事件将是mywidgetselect.

因此,如果您查看autocomplete源代码,您会发现this._trigger( "select", ...)那里使用了它。

您还可以参考此博客了解更多详细信息

于 2013-03-27T13:50:06.703 回答
-2

这两件事并不完全相同。他们只是做同样的事情;-)嗯,差不多。

首先,我需要解释一点理论:通常,在处理“异步”代码时,您有两种选择:回调和事件侦听器。回调是一个函数,由系统调用,在某些其他操作完成后。通常,您配置对象或运行一个函数并“启动”回调以在发生事情时启动。事件发生时系统调用事件侦听器。通常,您将一堆事件侦听器绑定到事件,并且代码的其他部分可能会触发事件,从而触发所有侦听器函数。

当您不习惯事件和回调时,您可能看不到区别。只要知道使用回调会导致代码紧凑“意大利面条”,另一方面,使用侦听器会导致灵活但难以阅读的代码。我相信最好的方法是将两者结合起来以获得尽可能可读的代码。

在您的特定情况下,“select”是配置对象的一个​​属性,它指定一个回调函数。

“autocompleteselect”是事件的名称 - 您可以向该事件添加侦听器

$('.selector').on('autocompleteselect', doSomething);

或自己触发事件

$('.selector').trigger('autocompleteselect');
于 2013-03-27T14:07:40.270 回答