gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 08:24:41 25 4
gpt4 key购买 nike

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

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com