【问题标题】:On click event doesn't work on iPad/iPhone/Android on dynamically built elements点击事件在 iPad/iPhone/Android 上对动态构建的元素不起作用
【发布时间】:2019-08-13 19:44:34
【问题描述】:

这就是我构建 DOM 的方式:

var projectOverlay = document.createElement("div");
projectOverlay.className = "projectOverlay";
projectOverlay.onclick = function(){openSlider($(this))};   
project.appendChild(projectOverlay);

所以...openslider(elem) 功能在除移动设备(Android 手机、iPhone、iPad 等...)之外的所有浏览器中都能正常工作。有没有其他方法可以将事件绑定到尚未创建的元素,或者我在这里做错了什么?

Live example - 单击联系人以获取项目,然后尝试单击其中一个项目以将其展开。单击关于将带您回到主页。这仍然很乱,但网站仍处于早期开发阶段...

【问题讨论】:

标签: javascript android ios dom-events createelement


【解决方案1】:

某些手机和浏览器未在 JavaScript 中实现“onclick”事件。您应该使用对触摸更友好的事件,例如“touchstart”、“touchmove”和“touchend”。

更多信息在这里:https://developer.mozilla.org/en-US/docs/DOM/Touch_events

【讨论】:

  • 那么您将如何使用此方法创建元素并附加点击事件?我已经尝试了所有方法,但看不出有任何区别......仍然无法正常工作
  • 使用touchstart方法有什么问题吗?你至少应该得到一些反馈。
  • 没有任何改变。它适用于PC,但不适用于移动设备。你在我原来的问题中有一个链接......
  • 在移动浏览器模拟器中运行时,我在projects.js:270 上得到Uncaught TypeError: Cannot call method 'refresh' of undefined 这仅在我在浏览器模拟器中打开站点时才会发生。如果我以桌面模式打开站点,然后开始模拟,则不会发生异常,并且一切似乎都在正常工作。 (试试 Google Chrome 浏览器模拟器)
【解决方案2】:

在我的项目中遇到了同样的问题。动态创建的元素没有得到点击事件,除了在 iOS6 上(所以那里可能已经修复了一些东西)。我发现的解决方法是强制对包含动态创建的元素的 div 进行转换。页面加载时,包含我动态创建的元素的 div 确实存在。假设它有一个值为“container”的id属性,代码如下

var container = document.getElementById("container");
container.style.webkitTransitionDuration = "0";
container.style.webkitTransform = "translateY(0px)";

然后容器下动态创建的元素正在获取点击事件。

【讨论】:

    【解决方案3】:

    尝试在 appendChild 之后移动 click 事件绑定

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多