gpt4 book ai didi

javascript - 链接上的 jQuery 单击事件不会在普通 JS 中被捕获

转载 作者:行者123 更新时间:2023-11-29 20:54:14 25 4
gpt4 key购买 nike

我正在使用以下 Vanilla 绑定(bind)来模拟 jQuery 委托(delegate)事件:

document.addEventListener('click', function(e) {
console.log("some element was clicked");
console.log(e.target);

//here's where I would filter by target
});

一切正常,除非我尝试使用 jQuery 触发链接元素上的点击事件 <a href="#"> .那就根本不行了。普通点击事件处理程序不会被触发。

Reproduction working on <b> element

$('button').click(function() {
$('ul').append('<li><b>New</b></li>');
});

document.addEventListener('click', function(e) {
console.log("some element was clicked");
console.log(e.target);
});

$(document).on('keydown', function(){
console.warn("-------Trigger--------")
$('li').find('b').trigger('click');
});
div{
background: yellow;
padding:10px 20px;
border: 1px solid #ccc;
margin: 10px 0;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button>Add element</button>
<span id="trigger">Trigger</span>
<div>
Just focus the white panel and press any key. That will trigger the jQuery.click() event as you can see in the code.
</div>
<ul>
<li>Old element</li>
<li>Old element</li>
<li><b>Old element</b></li>
</ul>

相反,如果我将链接元素替换为粗体元素 <b>它按预期工作。这是怎么回事? Reproduction not working on <a> element

$('button').click(function() {
$('ul').append('<li><a href="#">New</a></li>');
});

document.addEventListener('click', function(e) {
console.log("some element was clicked");
console.log(e.target);
});

$(document).on('keydown', function(){
console.warn("-------Trigger--------")
$('li').find('a').trigger('click');
});
div{
background: yellow;
padding:10px 20px;
border: 1px solid #ccc;
margin: 10px 0;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button>Add element</button>
<span id="trigger">Trigger</span>
<div>
Just focus the white panel and press any key. That will trigger the jQuery.click() event as you can see in the code.
</div>
<ul>
<li>Old element</li>
<li>Old element</li>
<li><a href="#">Old element</a></li>
</ul>

不,我不想使用 [0]像这样:

$('li').find('a')[0].click();

我希望它正常启动:

$('li').find('a').click();

最佳答案

不幸的是,您不能在链接上触发 jQuery 中的 native 点击处理程序,它在源代码中被禁用并且评论说 "For cross-browser consistency, don't fire native .click() on links" .

因此,您必须使用 jQuery $(document).on("click") 绑定(bind)文档点击处理程序,或者直接调用节点 clickHandler $('li') .find('a')[0].click();

关于javascript - 链接上的 jQuery 单击事件不会在普通 JS 中被捕获,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50157666/

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