【问题标题】:jQuery click event not firing - ios home screen web appjQuery单击事件未触发-ios主屏幕Web应用程序
【发布时间】:2012-08-26 11:31:51
【问题描述】:

构建 Web 应用程序并无法触发点击事件。从普通的 Safari 实例运行时,它可以完美运行,但从主屏幕运行时,它会失败。

$("a.applink").live('click', clickHandler);
var clickHandler = function(e) {
    console.log(e);
    e.preventDefault();
}

从主屏幕运行时,“e”为空。如果我将 'click' 替换为 'touchend',它确实可以工作,但 touchend 并没有给出正确的行为(即,如果您碰巧触摸了一个链接以开始滚动,它会触发意外的点击)。

有没有合适的解决方案?

【问题讨论】:

    标签: jquery ios events web-applications click


    【解决方案1】:

    我知道这个答案有点晚了,但万一其他人偶然发现了这个问题:

    如果您通过 JS 使元素“可点击”,请将 cursor: pointer; 添加到元素的样式中。这将告诉 iOS 触发点击事件。

    一般来说,使用触摸事件可能会干扰滚动。

    【讨论】:

      【解决方案2】:

      首先定义clickHandler函数,一旦它被声明然后使用$("a.applink").live('click', clickHandler);,现在你在声明之前将clickHandler绑定到一个事件,

      注意:此模式中的顺序很重要。

      var clickHandler = function(e) {
          console.log(e);
          e.preventDefault();
      }
      
      jQuery(function(){
          $("a.applink").live('click', clickHandler);
      })
      

      像这样修改你的代码

      jQuery(function(){
          $("a.applink").live('click', clickHandler);
      });
      
      function clickHandler (e) {
          console.log(e);
          e.preventDefault();
      
      }
      

      【讨论】:

      • 谢谢。我最初错误地发布了但是,我已经按照正确的顺序进行了这些操作。 (在调用之前定义函数)所以我不认为这是问题所在。从普通 Safari 实例运行时,它可以正常工作,但是从主屏幕启动时,它会失败。
      【解决方案3】:

      我是这样做的:

      本质上,当您浏览页面时,您将点击或滚动。 (嗯,还有其他的东西,比如捏和滑动,你以后可以弄清楚)......

      因此,点击您的“touchstart”后会出现“touchend” 在滚动时,您的“touchstart”后面会跟着一个“touchmove”

      使用 Jq 1.7... 在其他版本上您可以使用 .bind()

      function nextEvent() {
          //behaviour for end
          $(this).on('touchend', function(e){
              /* DO STUFF */
              $(this).off('touchend');
              });
          //behaviour for move
          $(this).on('touchmove', function(e){
              $(this).off('touchend');
              });     
          }
      
      $(element).on('touchstart', this, nextEvent);
      

      基本上,当“touchstart”发生时,我会将操作绑定到“touchend”和“touchmove”。

      'Touchend' 做任何我想要点击做的事情,然后解除绑定 'Touchmove' 基本上什么都不做,除了 unbind 'touchend'

      这样,如果你点击你会得到动作,如果你滚动什么都不会发生,但滚动..

      【讨论】:

      • 谢谢。我会试试这个方法。你知道为什么在 ios 上从主屏幕运行应用程序时“点击”事件不起作用吗?
      猜你喜欢
      • 1970-01-01
      • 2014-04-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-28
      • 2019-06-05
      相关资源
      最近更新 更多