我需要从几个 jQuery UI 对话框中观察事件。它们都标配有一些您可以收听的事件。到目前为止没有问题。
我可以使用它来将函数绑定到打开事件:
$(document).bind('dialogopen', function() {});
但是我需要区分事件起源于哪个对话框。例如:
$('#dialog1').dialog();
$('#dialog2').dialog();
打开它们中的任何一个都会触发相同的事件。绑定到文档的函数将在两个对话框打开时触发。这不是我所希望的。我找到了两种可能的解决方案,但都感觉不错,但至少可以完成这项工作。
方案一:通过open事件的回调函数触发自定义事件
// Trigger events
$('#dialog1').dialog({open: function() {
$(this).trigger('dialog1open')
}
});
$('#dialog2').dialog({open: function() {
$(this).trigger('dialog2open')
}
});
// Observe events
$(document).bind('dialog1open', function() {
//actions specifik to dialog 1 open event
});
$(document).bind('dialog2open', function() {
//actions specifik to dialog 2 open event
});
这种方式需要我为所有事件编写自定义函数,在启动它们时在所有对话框上,只是用特定于每个对话框的事件名称转发它。
解决方案2: 在事件参数中捕获目标。它看起来像这样:
$(document).bind('dialogopen', function(event) {
el = event.target; // get the element triggering the event
switch(el.id) { // Action depending on the triggers id
case dialog1:
//do something
break;
case dialog2:
//do something else
break
}
});
另一方面,这种方式要求我为我有兴趣捕获的每个事件都有大量的切换案例。
在这里写一个包装插件是个好主意吗?一个插件,它强制你给id
每个对话框一个。然后它将使用id
as 前缀或后缀重新触发每个事件。例如,打开#dialog1
会触发自定义事件dialog1open
。
想法或具体解决方案将在这里受到赞赏
编辑:我没有提到的一个重要的事情是我有观察者,主题(喜欢#dialog1
和#dialog2
)不知道。必须考虑到这一点。