javascript - 向选定的 div 添加一个类,用于比较输入值和数据函数

标签 javascript jquery html

我创建了两个“按钮”框,用于更改隐藏的 radio 输入。

当您单击“选项 1”框时,它将更新单选输入的选定字段。我现在需要它做的是,如果单选框的值相等,则向单击的 .nc-option 添加一个类。

我试图说如果#campaign_select 输入与单击的数据函数值具有相同的值,则添加.active - 但似乎无法弄清楚。

PS:我使用的是 WordPress ACF,因此我不只是在广播区域内添加内容。

Fiddle Link

jQuery(document).on("click", "[id^=choice]", function() {

  if ($("#campaign_select input").val() == $(this).data("function")) {
    $(this).addClass('active');
  } else {
    $(this).removeClass('active');
  }
  var no = this.id.replace("choice", "");
  $("#campaign_select input[value=" + no + "]").click().prop("checked", true);

});
.nc-type {
  background: #1b2836;
  border: 1px solid black;
  padding: 8rem 4rem;
  padding-bottom: 0;
  border-bottom: 0;
}

.nc-type p {
  color: #8899A6;
  max-width: 500px;
}

.nc-type h3 {
  margin-bottom: 1rem;
}

.page-template-page-submit .page-body-inner {
  border-top: 0;
}

#campaign_select .acf-radio-list {
  display: block;
}

.nc-option {
  background: #243447;
  padding: 2rem;
  border: 1px solid black;
  margin-bottom: 4rem;
  transition: 0.3s ease all;
}

.nc-option label {
  color: #fff;
}

.nc-option:hover {
  background: #2c3f56;
  cursor: pointer;
}

.nc-option svg {
  position: relative;
  top: 5px;
}

.nc-option p {
  color: #8899A6;
  font-size: 14px;
  margin: 0;
}

.nc-option-1 .a {
  fill: #1DA1F2;
}

.nc-option-2 .a {
  fill: #f2771d;
}

.nc-option-3 .a {
  fill: #1df27f;
}

.nc-option-4 .a {
  fill: #f21d90;
}

.active {
  border-color: #1da1f2;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="nc-campaign-select">
  <div id="choice1" class="nc-option nc-option-1" data-function="1">
    <label>Option 1</label>
  </div>
  <!-- end of option -->
  <div id="choice2" class="nc-option nc-option-2" data-function="2">
    <label>Option 2</label>
  </div>
  <!-- end of option -->
</div>

<div id="campaign_select">
  <div class="acf-input">
    <input type="hidden">
    <ul>
      <li>
        <label class="selected">
          <input type="radio" id="ac-1" name="ac" value="1" checked="checked">Option 1</label>
      </li>
      <li>
        <label class="">
          <input type="radio" id="ac-2" name="ac" value="2">Option 2</label>
      </li>
    </ul>
  </div>
</div>

最佳答案

尝试一下这个。您不需要检查两个值是否相等。如果 .active 类已添加到任何按钮框,只需将其删除,然后将其添加到当前单击的按钮框即可。
JS:

jQuery(document).on("click", "[id^=choice]", function(event) {
  if (!$(this).hasClass('active')) {
    $("[id^=choice]").removeClass('active');
    $(this).addClass('active');
    var no = this.id.replace("choice", "");
    jQuery("#campaign_select input[value=" + no + "]").prop("checked", true);
  }
});

HTML:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="nc-campaign-select">
  <div id="choice1" class="nc-option nc-option-1 active" data-function="1">
    <label>Option 1</label>
  </div>
  <!-- end of option -->
  <div id="choice2" class="nc-option nc-option-2" data-function="2">
    <label>Option 2</label>
  </div>
  <!-- end of option -->
</div>

<div id="campaign_select">
  <div class="acf-input">
    <input type="hidden">
    <ul>
      <li>
        <label class="selected">
          <input type="radio" id="ac-1" name="ac" value="1" checked="checked">Option 1</label>
      </li>
      <li>
        <label class="">
          <input type="radio" id="ac-2" name="ac" value="2">Option 2</label>
      </li>
    </ul>
  </div>
</div>

关于javascript - 向选定的 div 添加一个类,用于比较输入值和数据函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48475528/

相关文章:

javascript - 如何使用 onbeforeunload 事件等待 jquery 动画完成?

javascript - jQuery 双对象构造函数 - 例如$($(这个))

javascript - Bootstrap 3 : Row stacking order

javascript - 转义字符不适用于 innerHTML

html - 如何在 Sublime Text 3 中使用正则表达式修改多个文件中的链接

javascript - jquery遍历DOM寻找连续值

javascript - 使用 DateTimePicker 插件时无法使用 jquery 获取用户输入的值

javascript - 如何使用 Node.js Selenium Chrome 驱动程序设置文件下载目录

JavaScript - 拆分多个返回值

javascript - 将图像对象作为函数和类参数传递