触发方法在jQuery中不起作用

Posted

技术标签:

【中文标题】触发方法在jQuery中不起作用【英文标题】:trigger method not working in 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') 【参考方案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 并没有打开文件夹

以上是关于触发方法在jQuery中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

jQuery $(this) 选择器在函数中不起作用

jQuery ContextMenu 事件在 IOS 8.2 中不起作用

jQuery .append() 在 IE、Safari 和 Chrome 中不起作用

jQuery .on() 方法在 Chrome 中不起作用(但在 IE 和 FF 中起作用)

Ajax 在 JQuery 表单插件中不起作用

Jquery getJSON 在 Chrome 中不起作用