是否无法在$(document)上为jqueryui / jqm小部件事件设置on()侦听器?

时间:2013-10-18 14:39:12

标签: javascript jquery jquery-ui jquery-mobile jquery-ui-widget-factory

我正在尝试在$(document)上设置一个全局事件活页夹,它源于我的所有核心应用程序功能。

我正在使用一些jQueryUI小部件(来自jQuery Mobile),并希望我也可以在我的全局处理程序中包含小部件事件。

所以我试图这样做:

 $(document).on("click change filterablebeforefilter", ".action_elements", function (e) {
   // foo
 });

然而,这不起作用。我可以在我的窗口小部件input事件上设置单击和更改侦听器,但filterablebeforefilter不能像这样设置。至少我不能让它发挥作用。

JQM demos仅指定直接绑定:

 $( ".selector" ).on( "filterablebeforefilter", function( e, data ) {
  // foo
 });

问题:
但我想知道是否无法将事件附加到document

谢谢!

1 个答案:

答案 0 :(得分:0)

$(文档)上的自定义事件处理程序可以正常工作:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>OnEventHandler</title>
    <script src="Scripts/jquery-2.1.0.min.js"></script>
    <script language="javascript" type="text/javascript">
        $(document).ready(function () {
            $(document).on('click filterEvent', '.action_element', function () {
                alert('You Clicked Me!');
            });
            $('#OrderFilter').change(function () {
                $('#CustomerFilter').trigger('filterEvent');
            });
            $('#CustomerFilter').on('filterEvent', function () {
                alert('CustomerFilter filterEvent');
            });
        });
    </script>
</head>
<body>
    <p>Some text.</p>
    <p class="action_element">Click me!</p>
    <select id="OrderFilter">
        <option>By Order Id</option>
        <option>By Order Total</option>
    </select>
    <p id="CustomerFilter" class="action_element">Just some Text...</p>
</body>
</html>

您可以使用$(document).on('event','selector')为自定义事件委派处理程序。

修改

因此,通过自定义事件传播到文档级别并由委派的事件处理程序处理,可以排除任何可疑的事情。

查看JQM filter和您的问题,您是否在问:如果他们在输入框中单击或输入框发生更改,或者小部件在开始对某些数据应用过滤之前是正确的,那么请执行此操作( ){...}?

如果意图是覆盖过滤过程以获取一些数据进行过滤,则在过滤完成之前,正如文档所述;首先从数据库中获取(谷歌搜索想到......)它是否适用于手头的小部件是否有意义?如果您在应用程序中有多个小部件,您是否希望所有小部件对数据进行相同的数据库调用(例如,在同一页面上有4个Google搜索输入框?)

有意义的是,每个小部件的beforefilter事件必须是唯一的(想想3个文本框,一个用于谷歌,一个用于雅虎,一个用于bing)。如果是这样,他们如何做到这一点我还不知道(但会尝试,因为我有兴趣知道...)

此外,在过滤器启动之前有250ms的延迟,因此它等待用户是否完成了输入...也将委托更改事件,处理程序将执行它,并完成或在触发beforefilter事件250ms之后完成的方式...所以处理程序被执行两次?无论是否有,它是否有意义?

我猜测,他们拥有它所以它只能按照设计的方式为每个小部件设置一个prefilter事件处理程序,如上所述。另请注意,在文档示例中,它们使用.on()的直接绑定表示法(未指定选择器)。一切都指向一个元素的绑定,而不是委托。