【问题标题】:Using trigger with dynamic content使用带有动态内容的触发器
【发布时间】:2016-05-10 00:17:24
【问题描述】:

我正在动态加载包含一系列按钮的内容。我想在按下第一个按钮时触发第二个按钮的点击,但是触发事件永远不会触发。

jQuery

$(document).on('click', '.main-button', function() {
    var self = $(this).attr('class').split(' ')[0];
    $('button.' + self + '.product-id').trigger('click');
});

HTML

<div class="button-wrap">
    <button class="b-1 main-button"></button>
    <button class="b-1 product-id"></button>
</div>
<div class="button-wrap">
    <button class="b-2 main-button"></button>
    <button class="b-2 product-id"></button>
</div>

【问题讨论】:

  • jQuery 的trigger 仅在您触发它最初绑定的元素上的事件时才有效,并且它适用于 jQuery 添加的事件处理程序。如果您尝试触发原生点击,请尝试$('button.'+self+'.product-id').get(0).click()
  • 正在研究解决方案...但在此之前快速评论:您的 HTML 上的 .main-button 类是错误的,请将其键入为 main-button,否则您必须将其引用为 ..main-button这没有任何意义(顺便说一下,对于 product-id 也是如此)
  • @AGE 是的,这不是实际代码的一部分,我打错了。将编辑。

标签: javascript jquery eventtrigger dynamic-content


【解决方案1】:

在实际的类名中不需要点,只需要在 css 选择器中。而不是 class="b-1 .main-button" 你想要:class="b-1 main-button"。其他类也一样。

注意:您还必须为产品按钮设置 onclick 处理程序,否则您将看不到点击。

$(document).on('click', '.main-button', function() {
    var self = $(this).attr('class').split(' ')[0];
    $('button.' + self + '.product-id').trigger('click');
});

$(document).on('click', '.product-id', function() {
  var klass = $(this).attr('class');
  alert(klass + " prod button triggered");
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="button-wrap">
    <button class="b-1 main-button">B1 main</button>
    <button class="b-1 product-id">B1 prod</button>
</div>
<div class="button-wrap">
    <button class="b-2 main-button">B2 main</button>
    <button class="b-2 product-id">B2 prod</button>
</div>

【讨论】:

  • 谢谢。这是最接近我正在寻找的解决方案的答案。
【解决方案2】:

我对你问题的解释是:

  1. 当我点击.b-1 时,会点击.b-2
  2. 第一个按钮的点击通过类名与第二个按钮的点击相关联,分别表示.b-1.main-button.b-2.main-button.b-1.product-id.b-2.product-id

注意:您的代码有一个错误,您在 HTML 中错误地标记了您的类。因此改变:

<div class="button-wrap">
    <button class="b-1 .main-button"></button>
    <button class="b-1 .product-id"></button>
</div>
<div class="button-wrap">
    <button class="b-2 .main-button"></button>
    <button class="b-2 .product-id"></button>
</div>

如下:

<div class="button-wrap">
    <button class="b-1 main-button"></button>
    <button class="b-1 product-id"></button>
</div>
<div class="button-wrap">
    <button class="b-2 main-button"></button>
    <button class="b-2 product-id"></button>
</div>

现在进入处理 trigger() 的 JQuery。这很简单。当你点击一个按钮时,触发另一个按钮的点击事件:

$(document).ready(function(){
  // Trigger click when clicking on respective b-1 button
  $(".b-1.main-button").click(function(){
    $(".b-2.main-button").trigger("click");
  });
  $(".b-1.product-id").click(function(){
    $(".b-2.product-id").trigger("click");
  });
  // Show an alert to identify which click was triggered
  $(".b-2.main-button").click(function(){
    alert("Main Button 2");
  });
  $(".b-2.product-id").click(function(){
    alert("Product Button 2");
  });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="button-wrap">
    <button class="b-1 main-button">Main Button 1</button>
    <button class="b-1 product-id">Product Id 1</button>
</div>
<div class="button-wrap">
    <button class="b-2 main-button">Main Button 2</button>
    <button class="b-2 product-id">Product Id 2</button>
</div>

如果我正确解释了您的问题,那么您应该有基于上述内容的解决方案。您有任何问题,请在下面的 cmets 中提问。

【讨论】:

  • jQuery 无法正常工作,因为您在此处展示的 HTML 是动态加载的,这就是我使用 $(document).on('click', ...) 选择点击事件的原因。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-02
  • 1970-01-01
  • 2018-09-08
  • 2011-07-27
  • 1970-01-01
  • 2016-05-19
相关资源
最近更新 更多