如何让小部件侦听其他小部件的点击,但不听取正常的点击次数。例如:
var $dialogWidget = jQuery('#dialogWidget');
$dialogWidget
.bind('click.btn1.otherWidget',doSomething)
.bind('click.btn2.otherWidget',doSomething2)
.bind('click.btn1.otherWidget2',doSomething3);
这段代码的问题是,当我点击$ dialogWidget上的任何地方时,我所绑定的所有这些事件都将被触发。我想要的是这个
var $otherWidget = jQuery('#otherWidget');
var $btn1 = $otherWidget.find('a.btn1');
$btn1
.click(function(){
$dialogWidget.trigger('click.btn1.otherWidget');
});
这应该是$ dialogWidget触发'click.btn1.otherWidget'事件的唯一方法。
我可以做的一件事就是黑客攻击,无论何时我手动触发点击事件都是使用'点击'而不是点击,但这感觉就像一个黑客。有什么想法吗?
答案 0 :(得分:2)
我认为最简单的解决方案是重命名您的活动,使用未采用的名称。在这种情况下,只是不要使用click
,而是这样做:
$dialogWidget
.bind('myClick.btn1.otherWidget',doSomething)
.bind('myClick.btn2.otherWidget',doSomething2)
.bind('myClick.btn1.otherWidget2',doSomething3);
然后当你触发它时:
$dialogWidget.trigger('myClick.btn1.otherWidget');
这是click
不会触发您不想以任何其他方式触发的命名空间自定义事件。要明确这不是一个黑客,它是完全正常的 jQuery行为,它在整个jQuery事件模型中有意支持。 Google for jQuery custom events
,周围有很多资源。
答案 1 :(得分:2)
您可以在此处使用事件委派,并尝试处理event.target
属性的操作。
var $widgets = jQuery('.widget');
$widgets.click(function(event){
if($(event.target).attr("id") !== "dialogWidget"){
alert("You won't see this alert if you click on #dialogWidet");
}
});
这可能会对你有帮助。