【发布时间】:2015-09-25 13:21:16
【问题描述】:
我有一种情况,我在网站的特定部分的许多情况下使用名为 data-command 的 data 属性,而不是绑定大量单独的点击事件,我决定只使用一个并使用开关如:
$('[data-command]').on('click', function(event) {
// Prevent default click action
event.preventDefault();
// Get command
var command = $(event.target).data('command');
switch (command) {
// Do stuff...
}
// Prevent default click action (IE 8)
return false;
});
但是,当试图让它处理通过 AJAX 加载的数据时,它刚刚成为一个问题。
这显然有效..
$('#existing_element').on('click', '[data-command]', function(event) {
...但由于它应该适用于网站该部分的许多不同页面,因此上述内容不适用于所有页面。
我可以只是确保将特定的id 提供给我加载所有 ajax 数据的父包装器,但这意味着使用一堆相同的代码创建两个单独的绑定事件.
我也可以这样做以覆盖所有基地..
$(document).on('click', '[data-command]', function(event) {
...但是将元素绑定到文档可能不是一个明智的想法。
编辑: Html 数据正在通过 jQuery 的 html 方法加载到 DOM。
我可以用任何 clean 方法来处理这个问题,还是应该只创建两个不同的绑定事件来处理每种情况?
【问题讨论】:
-
能否添加AJAX的代码以及如何在DOM中添加元素
-
..but that's probably not such a wise idea binding an element to the document.- 为什么? -
@raina77ow stackoverflow.com/questions/12824549/… - 我从中得到的是应该避免这种情况。
-
“我可以确保为父包装器提供一个特定的 id……,但这意味着要制作两个单独的绑定事件……” 为什么这需要两个事件?这行不通:
$('<parent_wrapper_selector>').on('click', '[data-command]', function(event) {…}) -
你的情况不是和...
when the objects you are capturing events on are dynamically created/removed and you still want to capture events on them without having to explicitly rebind event handlers every time you create a new one一样吗?
标签: javascript jquery ajax event-delegation jquery-on