You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WordPress环境下jQuery click生效但touchstart事件无响应问题求助

问题根因

  • 标准jQuery核心库没有内置.touchstart()快捷绑定方法,直接调用该方法属于无效写法
  • tap是jQuery Mobile扩展的专属事件,未引入jQuery Mobile库的前提下绑定on("tap")不会触发

解决方案

方案1:绑定原生触摸事件(无需额外引入依赖,推荐)

直接通过.on()方法绑定原生touchstart事件即可,可同时绑定click事件兼顾桌面端使用场景:

jQuery(document).ready(function() {
  // 可按需只保留touchstart,同时绑定click可兼容桌面端操作
  jQuery('.changecolor span').on('touchstart click', function(e) {
    // 可选:添加下面这行代码避免触摸后重复触发click事件(解决点透问题)
    e.preventDefault();
    
    // 此处直接复用你原有的业务逻辑代码即可
    // ...
  });
});

如果之前绑定过旧的click事件,为了避免重复触发,可先解绑旧事件再绑定新事件:

jQuery('.changecolor span').off('click touchstart').on('touchstart click', function(e) {
  // 业务逻辑
})

方案2:模拟tap事件(需要轻触判断、消除300ms延迟时使用)

如果需要tap事件的特性(区分轻触和滑动、消除移动端默认300ms点击延迟),不需要引入整个jQuery Mobile,用以下代码即可实现模拟:

jQuery(document).ready(function() {
  let touchStartX = 0;
  let touchStartY = 0;
  jQuery('.changecolor span').on('touchstart', function(e) {
    touchStartX = e.originalEvent.touches[0].pageX;
    touchStartY = e.originalEvent.touches[0].pageY;
  }).on('touchend', function(e) {
    const touchEndX = e.originalEvent.changedTouches[0].pageX;
    const touchEndY = e.originalEvent.changedTouches[0].pageY;
    // 偏移小于10px判定为轻触
    if (Math.abs(touchEndX - touchStartX) < 10 && Math.abs(touchEndY - touchStartY) <10) {
      e.preventDefault();
      // 此处放业务逻辑代码
      // ...
    }
  });
});

内容的提问来源于stack exchange,提问作者silverfish

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 16:36:07