触发方法在 jQuery 中不起作用
trigger method not working in jQuery
我有一个页面有大约 100 个像这样的 div。
<div id="ListItem_JBEEB_847">
<span title="-HD">
<span>F</span>
<span style="pointer-events: none;">-HD</span>
</span>
</div>
ID 编号不同。我正在尝试通过 jQuery 一个一个地点击这个 div/or 垃圾邮件。所以,我做了一个这样的循环..
$('div').each(function(){
div = $(this).attr('id');
if(div){
if(div.includes('ListItem_JBEEB')){
get_div = jQuery("#" + div).trigger('click');
}
}
});
上面的代码应该可以工作,但由于某些原因不能。它适用于样式和所有其他 DOM 操作,例如通过更改文本颜色
jQuery("#" + div).css({'color': 'red'})
所以循环没问题,我也尝试使用 jQuery("#" + div).find('span').trigger('click')
来定位跨度,但没有任何反应。
顺便说一句:在网站上,如果您单击任何一个 div,会立即向您显示更多信息,但是这一切都没有改变,我不确定触发点击是否有效
您必须在调用之前初始化点击事件,您必须在调用之前检查特定的点击事件是否已经初始化,否则它不会执行点击事件。
例如
// THIS WILL WORK
$(document).ready(function() {
jQuery("#ListItem_JBEEB_847").click(function(){
alert('a');
});
$('div').each(function(){
div = $(this).attr('id');
if(div){
if(div.includes('ListItem_JBEEB')){
jQuery("#" + div).click();
}
}
});
});
// THIS WILL NOT WORK
$(document).ready(function() {
$('div').each(function(){
div = $(this).attr('id');
if(div){
if(div.includes('ListItem_JBEEB')){
jQuery("#" + div).click();
}
}
});
jQuery("#ListItem_JBEEB_847").click(function(){
alert('a');
});
});
这是您的代码的更新版本。您可以使用 $(this).trigger('click')
代替 jQuery("#" + div).trigger('click')
,并单独定义 click
事件应该发生什么。
$(document).ready(function() {
$('div').each(function() {
div = $(this).attr('id');
if (div && div.includes('ListItem_JBEEB')) {
$(this).trigger('click');
}
});
});
$('div').on('click', function() {
console.log($(this).attr('id') + ' got clicked..');
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="ListItem_JBEEB_847">
<span title="-HD">
<span>F</span>
<span style="pointer-events: none;">-HD</span>
</span>
</div>
<div id="ListItem_JBEEB_848">
<span title="-HD">
<span>F</span>
<span style="pointer-events: none;">-HD-1</span>
</span>
</div>
<div id="ListItem_JBEEB_849">
<span title="-HD">
<span>F</span>
<span style="pointer-events: none;">-HD-2</span>
</span>
</div>
我有一个页面有大约 100 个像这样的 div。
<div id="ListItem_JBEEB_847">
<span title="-HD">
<span>F</span>
<span style="pointer-events: none;">-HD</span>
</span>
</div>
ID 编号不同。我正在尝试通过 jQuery 一个一个地点击这个 div/or 垃圾邮件。所以,我做了一个这样的循环..
$('div').each(function(){
div = $(this).attr('id');
if(div){
if(div.includes('ListItem_JBEEB')){
get_div = jQuery("#" + div).trigger('click');
}
}
});
上面的代码应该可以工作,但由于某些原因不能。它适用于样式和所有其他 DOM 操作,例如通过更改文本颜色
jQuery("#" + div).css({'color': 'red'})
所以循环没问题,我也尝试使用 jQuery("#" + div).find('span').trigger('click')
来定位跨度,但没有任何反应。
顺便说一句:在网站上,如果您单击任何一个 div,会立即向您显示更多信息,但是这一切都没有改变,我不确定触发点击是否有效
您必须在调用之前初始化点击事件,您必须在调用之前检查特定的点击事件是否已经初始化,否则它不会执行点击事件。
例如
// THIS WILL WORK
$(document).ready(function() {
jQuery("#ListItem_JBEEB_847").click(function(){
alert('a');
});
$('div').each(function(){
div = $(this).attr('id');
if(div){
if(div.includes('ListItem_JBEEB')){
jQuery("#" + div).click();
}
}
});
});
// THIS WILL NOT WORK
$(document).ready(function() {
$('div').each(function(){
div = $(this).attr('id');
if(div){
if(div.includes('ListItem_JBEEB')){
jQuery("#" + div).click();
}
}
});
jQuery("#ListItem_JBEEB_847").click(function(){
alert('a');
});
});
这是您的代码的更新版本。您可以使用 $(this).trigger('click')
代替 jQuery("#" + div).trigger('click')
,并单独定义 click
事件应该发生什么。
$(document).ready(function() {
$('div').each(function() {
div = $(this).attr('id');
if (div && div.includes('ListItem_JBEEB')) {
$(this).trigger('click');
}
});
});
$('div').on('click', function() {
console.log($(this).attr('id') + ' got clicked..');
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="ListItem_JBEEB_847">
<span title="-HD">
<span>F</span>
<span style="pointer-events: none;">-HD</span>
</span>
</div>
<div id="ListItem_JBEEB_848">
<span title="-HD">
<span>F</span>
<span style="pointer-events: none;">-HD-1</span>
</span>
</div>
<div id="ListItem_JBEEB_849">
<span title="-HD">
<span>F</span>
<span style="pointer-events: none;">-HD-2</span>
</span>
</div>