gpt4 book ai didi

javascript - jQuery.change() 与 addEventListener 不兼容?

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

我在使用纯 Javascript 和 jQuery(我正在使用两个不同的库)时遇到了这个问题。因此,对于文本输入字段,普通 Javascript 库依赖于使用 addEventListener 方法添加的更改事件绑定(bind)。另一个 jQuery Plugin(datetimepicker) 用于更改字段,并在更新值后触发 jQuery.change() 方法。

问题是,监听器不是由 jQuery 事件触发的。下面是一些简单的代码来说明这个问题。

<!DOCTYPE html>
<html>
<body>
<input id="abc">abc abc.</input>
<script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script>
document.getElementById('abc').addEventListener("change", function(){
alert('change event triggered');
});
$('#abc').change();
</script>
</body>
</html>

鉴于像这样非常简单的html页面,事件监听器实际上不会被jQuery.change()方法触发,因此不会显示警告框。如果我手动更改输入字段,事件会正常运行。

跟进:如果使用jQuery来进行事件绑定(bind)和触发,就没有问题。问题是,我正在使用一个用普通 Javascript (JSONEditor[ https://github.com/jdorn/json-editor]) 编写的库,并且使用 Javascript API 添加了事件绑定(bind),而我正在使用的其他库更改了一些输入字段并使用 jQuery 触发了事件, 并且事件未被捕获。

最佳答案

是的,jQuery.change()(和 jQuery.trigger())不会触发使用 addEventListener 添加的监听器。

目前这是 jQuery 的 WONTFIX(请参阅已关闭的问题 #2476#3347)(source)

我的解决方法:

替换

$('#abc').change(); // or $('#abc').trigger('change');

用这个:

$('#abc')[0].dispatchEvent(new Event('change'));

首先,您从 jQuery 元素 (`$('#abc'][0] ( source )) 中提取 native DOM 元素,然后分派(dispatch)您的事件。这样分派(dispatch)的事件将由 native 和 jQuery 监听器处理. 参见 demo .

关于javascript - jQuery.change() 与 addEventListener 不兼容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27242998/

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