Javascript 为什么不';当通过触发器触发时,CSS转换将触发。单击
我不明白为什么CSS转换在通过触发器事件调用时不运行,但在通过鼠标单击调用时运行 我指的是这个。(我的事件连接在JS面板的底部) 但是,Javascript 为什么不';当通过触发器触发时,CSS转换将触发。单击,javascript,jquery,html,css,Javascript,Jquery,Html,Css,我不明白为什么CSS转换在通过触发器事件调用时不运行,但在通过鼠标单击调用时运行 我指的是这个。(我的事件连接在JS面板的底部) 但是,CSS转换仅在使用classdl触发器直接单击第二个按钮时运行。我在这两种情况下都测试了这个,无论是直接点击还是触发点击,它都是相同的参考 因此,无论单击哪个按钮,都会运行此代码块: _initEvents: function () { var self = this; this.$trigger.on('cl
CSS
转换仅在使用classdl触发器直接单击第二个按钮时运行。我在这两种情况下都测试了这个
,无论是直接点击还是触发点击,它都是相同的参考
因此,无论单击哪个按钮,都会运行此代码块:
_initEvents: function () {
var self = this;
this.$trigger.on('click.dlmenu', function () {
if (self.open) {
self._closeMenu();
}
else {
self._openMenu();
}
return false;
});
我可以追踪到打开和关闭,并确认它运行时没有错误。但是第一次点击按钮时,菜单根本不显示
使用“CSS”转换时是否会出现某种非我的代码查找?您的notworks现在变为works;)
Fiddle:要继续回答聊天室问题,下面的代码返回false
this.$trigger.on('click.dlmenu', function () {
if (self.open) {
self._closeMenu();
}
else {
self._openMenu();
}
return false;
});
从jquery事件处理程序返回false将抑制该事件,这相当于调用:
e.preventDefault();
e.stopPropagation();
因此,返回false
会抑制事件,这一点很重要,因为在openMenu
函数中,当您单击菜单边界以外的任何位置时,代码会添加一个处理程序来关闭菜单:
$body.off('click').on('click.dlmenu', function () {
self._closeMenu();
});
因此,如果代码没有返回false并抑制事件,它将传播到主体并立即再次关闭菜单。这就是单击常规的menuOpen
按钮时发生的情况
但是,由于您试图通过以下方式用另一个按钮触发/模拟该按钮的点击:
$("#notworks").click(function (e) {
$('.dl-trigger').trigger('click');
});
然后,按钮notworks
正在传播一个单击,body处理程序会拾取该单击,并立即关闭由触发器调用打开的菜单
因此,您只需取消传播:
$("#notworks").click(function (e) {
$('.dl-trigger').trigger('click');
return false;
});
好的,非常感谢。你能解释一下这有什么区别吗?因为外部div(#dl菜单)也有事件。所以我使用e.stopPropagation()代码>以防止来自#notworks按钮的任何外部父级的事件。
$body.off('click').on('click.dlmenu', function () {
self._closeMenu();
});
$("#notworks").click(function (e) {
$('.dl-trigger').trigger('click');
});
$("#notworks").click(function (e) {
$('.dl-trigger').trigger('click');
return false;
});