我正在尝试在$(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
?
谢谢!
答案 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()的直接绑定表示法(未指定选择器)。一切都指向一个元素的绑定,而不是委托。