javascript - 更改事件未从页面触发

标签 javascript google-chrome-extension

最初我发布了这个问题。但后来我通过反复试验得到了答案。现在我想知道为什么我的回答会奏效。

saved page下面当我从扩展程序运行 $("#debitCard").change(); 时它不起作用但是当我从 Chrome 控制台运行时它起作用了?

为什么此行为与从控制台运行时不同?我什至在 setTimeout

内运行它

我什至在 HTML 中创建了一个按钮,单击它会调用此函数,但即使这样也不起作用。然而,从控制台调用每次都有效。

回答

我将此 $("#debitCard").change(); 替换为:

var element = document.getElementById('debitCard');
var event = new Event('change');
element.dispatchEvent(event);

我想知道这个 Javascript/JQuery 怪癖的原因

enter image description here

最佳答案

您在扩展中拥有的 jQuery 在与内容页面中的 jQuery 或库不同的范围内运行。

如果内容页面中的功能使用使用 jQuery 或类似工具的事件处理程序,则您无法从扩展范围内的 jQuery 中调用这些处理程序,因为您无法引用它们。

但是触发事件,无论是本地触发还是使用内容脚本中的 jquery,都有效,并且会触发页面的处理程序。

编辑:

自从这篇文章发布以来,这个问题一直在我脑海中萦绕,今天我发现了一个例子来说明我最初的观点——你不能(总是)使用 jQuery 触发事件处理程序:

目标:

<a id="vcemail-link"  href="#" onclick="signOut();">Sign out...</a>

我无法使用我的扩展中的 jquery 触发此 onclick 事件,我必须使用 native 版本

$('#vcemail-link').click(); // doesn't work
document.getElementById('vcemail-link').click(); // works

@user5858 这可能会让您满意,也可能不会,但它很重要且值得记住,我认为它也适用于内联 onchange()。

the reference

关于javascript - 更改事件未从页面触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47503840/

相关文章:

javascript - 有没有什么办法可以用 javascript 弹出一个前端?

Javascript:如何使用 promise 迭代数组?

javascript - Javascript如何从CLI发出噪音

javascript - 启用 false 或删除 chrome 扩展时是否可以要求输入密码?

google-chrome-extension - 谷歌加共享 : image and description not coming

google-chrome - 控制 “Oops! Chrome could not find … ”页面?

javascript - .replace() 在 jQuery 函数中不起作用

javascript - 用于检查用户登录的正则表达式不起作用

javascript - 如何通过从外部源(数据库)提取值来动态调整 chrome 扩展的 manifest.json 的 "matches"键?

javascript - 同时打开多个窗口、弹出窗口和新选项卡