尝试 hide/show div 但是 .slideToggle() 应用于页面上的所有 divs - 高级自定义字段转发器
Trying to hide/show a div however .slideToggle() is applying to all divs on page - Advanced Custom Fields Repeater
我有一个隐藏的 div,我想在按下按钮时显示它,但是因为 ACF 中继器正在重复 id,它会同时打开所有隐藏的 div。
//This is inside a repeater field causing the #buy to repeat
<button id="button">
<img src="images/right-arrow.png" width="35" class="button__icon">
</button>
</div>
<div id="buy" style="display:none" class="tour-event__wrapper--hidden tour-event__wrapper--hidden-bottom">
<div class="widget-containter">
<?php the_sub_field('eventbrite_widget'); ?>
</div>
</div>
// JQuery
$('button').click(function () {
$( "#buy" ).slideToggle("slow");
});
我想我需要使用 .find() 或 .next() 来查找#buy,但是我使用它们时运气不佳。
这应该有效
$('#button').click(function (event) {
var button = $(event.currentTarget)
button.parent().find("#buy").slideToggle("slow")
});
但 ID 必须是唯一的。我建议,根据 class.
选择
此外,上面的代码确实很脆弱,而且只是一个 hack。如果您的 HTML 结构发生变化,这将不再有效。
理想情况下,您必须能够唯一标识转发器的每次迭代并将索引附加到 id(因此它看起来像 id="buy001"
可以在 ACF 中继器上获取唯一 ID,这应该可以解决您的问题:
<?php if(get_field('repeater_field_name')): $i = 0; ?>
<ul>
<?php while(has_sub_field('repeater_field_name')): $i++; ?>
<li class="section-<?php echo $i; ?>">
<button id="button<?php echo $i; ?>">
<img src="images/right-arrow.png" width="35" class="button__icon">
</button>
<div id="buy<?php echo $i; ?>" style="display:none" class="tour-event__wrapper--hidden tour-event__wrapper--hidden-bottom">
<div class="widget-containter">
<?php the_sub_field('eventbrite_widget'); ?>
</div>
</div>
</li>
<?php endwhile; ?>
</ul>
<?php endif; ?>
您的 jQuery 片段将是
$('[id^=button]').click(function(evt) {
var buyId = evt.target.id.replace("button","buy");
$("#"+buyId).slideToggle("slow");
});
我有一个隐藏的 div,我想在按下按钮时显示它,但是因为 ACF 中继器正在重复 id,它会同时打开所有隐藏的 div。
//This is inside a repeater field causing the #buy to repeat
<button id="button">
<img src="images/right-arrow.png" width="35" class="button__icon">
</button>
</div>
<div id="buy" style="display:none" class="tour-event__wrapper--hidden tour-event__wrapper--hidden-bottom">
<div class="widget-containter">
<?php the_sub_field('eventbrite_widget'); ?>
</div>
</div>
// JQuery
$('button').click(function () {
$( "#buy" ).slideToggle("slow");
});
我想我需要使用 .find() 或 .next() 来查找#buy,但是我使用它们时运气不佳。
这应该有效
$('#button').click(function (event) {
var button = $(event.currentTarget)
button.parent().find("#buy").slideToggle("slow")
});
但 ID 必须是唯一的。我建议,根据 class.
选择此外,上面的代码确实很脆弱,而且只是一个 hack。如果您的 HTML 结构发生变化,这将不再有效。
理想情况下,您必须能够唯一标识转发器的每次迭代并将索引附加到 id(因此它看起来像 id="buy001"
可以在 ACF 中继器上获取唯一 ID,这应该可以解决您的问题:
<?php if(get_field('repeater_field_name')): $i = 0; ?>
<ul>
<?php while(has_sub_field('repeater_field_name')): $i++; ?>
<li class="section-<?php echo $i; ?>">
<button id="button<?php echo $i; ?>">
<img src="images/right-arrow.png" width="35" class="button__icon">
</button>
<div id="buy<?php echo $i; ?>" style="display:none" class="tour-event__wrapper--hidden tour-event__wrapper--hidden-bottom">
<div class="widget-containter">
<?php the_sub_field('eventbrite_widget'); ?>
</div>
</div>
</li>
<?php endwhile; ?>
</ul>
<?php endif; ?>
您的 jQuery 片段将是
$('[id^=button]').click(function(evt) {
var buyId = evt.target.id.replace("button","buy");
$("#"+buyId).slideToggle("slow");
});