【问题标题】:trigger method not working in jQuery触发方法在jQuery中不起作用
【发布时间】:2018-01-05 05:03:16
【问题描述】:

我有一个页面,其中包含大约 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/或垃圾邮件。所以,我做了一个这样的循环..

$('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,会立即向您显示更多信息,但是没有任何变化,我不确定触发点击是否有效

【问题讨论】:

  • div 中有 2 个跨度,您是否有点击事件,您应该更具体地选择跨度
  • 我不知道跨度是否触发了效果,但我只是点击了 div ......没有办法告诉我点击的是哪个元素..但我确实点击了div 并且它有效。如果跨度有填充,并且有一种清晰的方法可以将跨度与 div 分开,我将能够知道我正在点击哪个 el @gurradio
  • @adeneo 但我能够简单地创建一个测试 btn 一个新页面,并且能够通过 trigger() 点击 btn ...
  • 我删除了那条评论,我不知道你在做什么,但同样,trigger() 不一定和点击一样,它只是触发与 jQuery 绑定的事件处理程序。跨度>
  • 作为旁注,您的整个代码都可以替换为$('div[id^="ListItem_JBEEB"]').trigger('click')

标签: javascript jquery dom dom-manipulation jquery-events


【解决方案1】:

这是您的代码的更新版本。除了jQuery("#" + div).trigger('click'),您可以使用$(this).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>

【讨论】:

  • +1 代码。但我想它应该可以工作,但由于某种原因它没有。我打开控制台并在这个网站上尝试过ephremtube.com/mp3.php 并没有打开文件夹
【解决方案2】:

你必须在调用它之前初始化点击事件,你必须在调用它之前检查特定的点击事件是否已经初始化,否则它不会执行点击事件。
举例

// 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');
    });
});

【讨论】:

  • +1 代码。但我想它应该可以工作,但由于某种原因它没有。我打开控制台并在这个网站上尝试过ephremtube.com/mp3.php 并没有打开文件夹
猜你喜欢
  • 1970-01-01
  • 2011-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多