Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/440.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么不';当通过触发器触发时,CSS转换将触发。单击_Javascript_Jquery_Html_Css - Fatal编程技术网

Javascript 为什么不';当通过触发器触发时,CSS转换将触发。单击

Javascript 为什么不';当通过触发器触发时,CSS转换将触发。单击,javascript,jquery,html,css,Javascript,Jquery,Html,Css,我不明白为什么CSS转换在通过触发器事件调用时不运行,但在通过鼠标单击调用时运行 我指的是这个。(我的事件连接在JS面板的底部) 但是,CSS转换仅在使用classdl触发器直接单击第二个按钮时运行。我在这两种情况下都测试了这个,无论是直接点击还是触发点击,它都是相同的参考 因此,无论单击哪个按钮,都会运行此代码块: _initEvents: function () { var self = this; this.$trigger.on('cl

我不明白为什么CSS转换在通过触发器事件调用时不运行,但在通过鼠标单击调用时运行

我指的是这个。(我的事件连接在JS面板的底部)

但是,
CSS
转换仅在使用class
dl触发器直接单击第二个按钮时运行。我在这两种情况下都测试了
这个
,无论是直接点击还是触发点击,它都是相同的参考

因此,无论单击哪个按钮,都会运行此代码块:

 _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;
   });