假设我有以下设计代码:
function runTriggers() {
$(document).trigger('mytrigger.ns1');
$(document).trigger('mytrigger.ns2');
$(document).trigger('mytrigger.ns3');
...
}
如何连接一个事件处理程序以简单地监听mytrigger
而不必担心提及将来可能出现的每种类型的命名空间触发器?
$(document).on('mytrigger', doSomething);
但它不起作用。
答案 0 :(得分:0)
根据documentation for Namespaced Events:
$('.class').bind('click.namespace', function(){});
$('.class').trigger('click.namespace'); // Will trigger
$('.class').trigger('click'); // Will trigger
$('.class').trigger('click.other'); // Won't trigger
所以你设计的代码肯定不会起作用,但你可以按如下方式改变逻辑:
$(document).on('mytrigger.ns1', doSomething1);
$(document).on('mytrigger.ns2', doSomething2);
$(document).on('mytrigger.ns3', doSomething3);
然后:
function runTriggers() {
$(document).trigger('mytrigger'); // will trigger all three `doSomething` handlers.
...
}
答案 1 :(得分:0)
这是一个让您接近的解决方法。首先,在字符串原型中添加一个方法:
String.prototype.namespaces = function () {
var eventName = this + ".";
var args = Array.prototype.slice.call(arguments);
return eventName + args.join(" " + eventName);
}
然后,您可以使用.namespaces(namespace1, namespace2...)
表示法绑定到同一事件的多个名称空间:
$(function () {
$("#mydiv").on("someevent".namespaces("a","b"), function() {
alert("hello");
});
$("#mydiv").trigger("someevent.a");
$("#mydiv").trigger("someevent.b");
});
这是jsfiddle。