javascript - 为什么 CSS 转换在通过 trigger.click 触发时不触发

标签 javascript jquery html css

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

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

<button id="notworks">notworks</button>
<button class="dl-trigger">works</button>

第一个按钮只是触发第二个按钮的点击事件。这不会运行关联的 CSS 转换,但它会触发事件并且 console.log 输出完全相同......所以我知道点击事件的处理程序正在触发并被传递触发方式。

 $("#notworks").click(function () {
       $('.dl-trigger').trigger('click');
 });

然而,CSS 转换仅在直接单击具有类 dl-trigger 的第二个按钮时运行。我在这两种情况下都测试了 this,无论是直接点击还是触发点击,它都是相同的引用。

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

 _initEvents: function () {

            var self = this;
            this.$trigger.on('click.dlmenu', function () {

                if (self.open) {
                    self._closeMenu();
                }
                else {
                    self._openMenu();
                }
                return false;

            });

我也可以跟踪打开和关闭的调用,并确认它们都运行无误。但是第一次单击按钮时,菜单根本不显示。

使用“CSS”转换时是否会发生某种非我的代码查找?

最佳答案

要跟进您的聊天室问题,下面的代码返回 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 handler 拾取并立即关闭由 trigger 调用打开的菜单。

所以你只需要取消传播:

   $("#notworks").click(function (e) {
       $('.dl-trigger').trigger('click');
       return false;
   });

关于javascript - 为什么 CSS 转换在通过 trigger.click 触发时不触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33643215/

相关文章:

javascript - 多个 document.getElementById

javascript - 如何强制点击按钮 "General Data"?

javascript - jQuery 淡入新图像

jquery - 高效的SQL查询以获取不同时间不同条件的行

javascript - jQuery 总是选中一个复选框

javascript - 如何删除 leaflet.draw 中的绘图层?

javascript - 无法检查特定的父元素

html - CSS 未在 IE11 和 Chrome 中加载

javascript - IE7 CSS 问题 : cannot get correct span width

html - 在 CSS 中使用 fixed 重叠