点击事件在Chrome中不起作用,但是当我们从控制台手动执行事件时会触发事件

从几小时开始,我就试图找到一个棘手的客户问题的根本原因。 感谢帮助。

客户端Chrome浏览器中的所有点击事件均未触发。

但是当我们从控制台调用JavaScript方法时它会触发!

在此处输入图像描述

在附图中,您可以看到我是如何触发事件的

尝试删除“数据绑定”属性并添加简单的“onClick”,仍然无法正常工作。 没有在网站上工作的按钮:(

这是代码

他们都没有被解雇。

在IE和FireFox中,所有按钮都按预期工作,问题仅在于chrome

笔记本电脑是基于触摸屏!!

1.在Chrome浏览器中输入以下内容:

铬://标志/#触摸事件

2.在启用触摸事件部分,请从下拉列表中选择“禁用”。

3.点击“立即重启”

回答

由于用户笔记本电脑是“ HP Elitebook 840 ”,因此启用了触摸屏。

所以解决方案是禁用触摸屏

1.在Chrome浏览器中输入以下内容:

铬://标志/#触摸事件

2.在启用触摸事件部分,请从下拉列表中选择“禁用”。

3.点击“立即重启”

我意识到这是一个旧post,但由于描述的问题仍然存在,我将提供我的解决方案:

我没有触摸屏笔记本电脑,所以我自己没有遇到这个问题 – 但如果我要解决它,我需要复制它。 所以,我进入了chrome://flags/#touch-events并将Enable touch events设置为Enabled

我重新加载了Chrome,打开了开发人员控制台,然后按⌘+⇧+ M打开“设备模式”窗口(似乎最后一部分并非绝对必要)。

现在我能够复制问题 – click事件的监听器永远不会触发。

在研究这个问题时,我偶然发现了图书馆–Tocca.js 。 其描述如下:

超轻量级脚本(1kb)通过Javascript事件检测,如’tap”dbltap”swipeup”swipeown”swipeleft”swiperight’在任何设备上。

为了查看触发了什么事件(如果有的话),我将Tocca.js提供的所有事件处理程序附加到显示有问题行为的元素:

 var $elm=$('.log-in').last() $elm.on('tap',function(e,data){ console.log(e,data); }); $elm.on('dbltap',function(e,data){ console.log(e,data); }); $elm.on('longtap',function(e,data){ console.log(e,data); }); $elm.on('swipeleft',function(e,data){ console.log(e,data); }); $elm.on('swiperight',function(e,data){ console.log(e,data); }); $elm.on('swipeup',function(e,data){ console.log(e,data); }); $elm.on('swipedown',function(e,data){ console.log(e,data); }); 

然后我点击按钮 – 和 – 尤里卡 – 控制台输出!

 r.Event {type: "tap", originalEvent: TouchEvent, timeStamp: 1471550288951, jQuery310022933444763555788: true, isTrigger: 3…} Object {x: 897.4290161132812, y: 264.85699462890625, distance: undefined} 

Tocca.js在tap事件监听器中捕获了该事件。 事实certificate,通过在页面中包含Tocca.js并将tap事件添加到正在侦听click任何事件侦听器,可以解决有问题的行为。 为了安全起见,我还添加了另外两个Tocca.js“tap-like”事件:

 $('.log-in').on('click tap dbltap longtap', function(e) { console.log("HAIL SATAN!"); }) 

虽然我对使用Tocca.js感到满意并且没有理由进一步挖掘,但通过将一些调试语句插入Tocca.js来确定原始发出的事件是相当简单的。

所以现在你知道,知道是成功的一半。

我将在这里跳到一个空池并做一个疯狂的猜测,因为你没有提供任何代码,检查那些链接没有pointer-events: none; 在css中设置。 这将阻止执行任何单击处理程序。

我敢打赌,当你需要它时,元素还没有加载到dom上。 所以你的代码基本上是$(undefined).on("click", fun)或类似的东西。 尝试编写一个if条件,检查在定义条件时元素本身是否已加载,并查看您的结果。 在定义监听器之前,可能是console.log元素以确保你拥有它?