【问题标题】:Event triggers outside elements won't fire on tap元素外部的事件触发器不会在点击时触发
【发布时间】:2015-06-14 11:53:44
【问题描述】:

我设置了几个事件触发器来在用户点击特定元素时关闭它们。这适用于非移动设备,但在移动设备或平板电脑上它们不会触发。我假设这是因为点击事件的触发方式与点击不同。有关如何处理此问题以便函数涵盖这两个方面的任何建议?

// Listen for unique event targets
      $(document).on( 'click', function(event) {
        if (!$(event.target).closest( '.modal .content' ).length) {
          $( '.modal' ).fadeOut(200);
        }
        if (!$(event.target).closest( '.language-selector ul' ).length) {
          if ( $( '.language-selector' ).is( ':visible') ) {
            $( '.language-selector >' ).removeClass('active');
          }
        }
        if (!$(event.target).closest( '.searchbox' ).length) {
          if ( $( '.searchfield' ).is( ':visible') ) {
            $( '.searchfield' ).removeClass('active').parents( '.searchbox' ).find( 'input[type="submit"]' ).removeClass( 'active' );
          }
        }
      });

【问题讨论】:

标签: jquery mobile triggers click tap


【解决方案1】:

是的,点击和点按是不同的事件。

您可以使用 JQuery 选择器语法(click tap):

来绑定两者
// Listen for unique event targets
      $(document).on( 'click tap', function(event) {
        if (!$(event.target).closest( '.modal .content' ).length) {
          $( '.modal' ).fadeOut(200);
        }

【讨论】:

  • 谢谢,但除了链接目标外,我无法触发它。是因为我没有使用 jQuery mobile 吗?我需要它来触发任何元素。
  • @StaffanEstberg,是的,也不是。使用 JavaScript 的移动设备总是在反复试验。 JQuery Mobile 尝试合并事件,它可能会更好。或者您的问题可能是点击和点击之间的 300 毫秒差异。考虑到您的淡入淡出效果和 200 毫秒差异,它可能是。在这种情况下,Fastclick 可能会有所帮助。继续尝试不同的解决方案,直到其中一种可行。快速点击可以找到github.com/ftlabs/fastclick
【解决方案2】:

尝试将“click”绑定到“touchstart”:

$(document).on( 'click touchstart', function(event) {
      if (!$(event.target).closest( '.modal .content' ).length) {
      $( '.modal' ).fadeOut(200);
}

为了解决...

有许多解决方案可以捕获非 jquery mobile 的点击事件,并且如果您只需要访问“tap”,它们就不会那么重。

更多关于“touchstart”和其他原生js触摸事件here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-18
    • 2013-12-09
    • 2019-03-03
    • 2016-10-21
    • 2020-12-27
    相关资源
    最近更新 更多