【问题标题】:If radio button checked change parent div (li) background - javascript如果选中单选按钮更改父 div (li) 背景 - javascript
【发布时间】:2015-12-03 02:15:26
【问题描述】:

我在 li 元素中有单选按钮, 一旦选中单选按钮,我想更改 li (父 div)的背景颜色。我成功地通过 CSS 在 li 上设置了悬停,但似乎 :checked 在父 div 上不起作用。 这是我的 html + css 代码:

.job-manager-term-checklist { 
    margin: 1em 0 0;
    padding: 0;
    list-style: none;
    overflow: hidden;
  }

.job-manager-term-checklist li {
    border: 1px solid #ccc;
    overflow: auto;
    padding: 5px;
    margin-left: 5px;
    border-radius: 5px;
    background-color: #ebf1f9;
    width: 20%;
  }

.job-manager-term-checklist li:hover { 
  background-color: #4e83ca;
  color: #fff;
  }
<div class="field required-field">
  <ul class="job-manager-term-checklist job-manager-term-checklist-job_category">
    <li id="job_listing_category-72" class="popular-category"><label class="selectit"><input value="72" type="radio" name="tax_input[job_listing_category][]" id="in-job_listing_category-72">1</label></li>
    <li id="job_listing_category-73"><label class="selectit"><input value="73" type="radio" name="tax_input[job_listing_category][]" id="in-job_listing_category-73">2</label></li>
    <li id="job_listing_category-75"><label class="selectit"><input value="75" type="radio" name="tax_input[job_listing_category][]" id="in-job_listing_category-75">3</label></li>
    <li id="job_listing_category-76"><label class="selectit"><input value="76" type="radio" name="tax_input[job_listing_category][]" id="in-job_listing_category-76">4</label></li>
    <li id="job_listing_category-80"><label class="selectit"><input value="80" type="radio" name="tax_input[job_listing_category][]" id="in-job_listing_category-80">5</label></li>
    <li id="job_listing_category-86"><label class="selectit"><input value="86" type="radio" name="tax_input[job_listing_category][]" id="in-job_listing_category-86">6</label></li>
    <li id="job_listing_category-98"><label class="selectit"><input value="98" type="radio" name="tax_input[job_listing_category][]" id="in-job_listing_category-98">7</label></li>
  </ul>
</div>

我将不胜感激有关此问题的任何帮助, 谢谢

【问题讨论】:

  • 你不能在 CSS... 使用 javascript,或者更好的 jQuery...
  • @Legionar OP 要求提供 JavaScript 解决方案。使用 CSS 很明显你不能定位父元素
  • @MarcosPérezGude 是的,这就是我写“使用 javascript,或者更好的 jQuery...”的原因
  • 唯一适用于 OP 的解决方案,也就是我的,有 2 个反对票。我等待解释。

标签: javascript html css


【解决方案1】:

应该这样做:

function updateHighlightRadio() {
  var selected = this.parentNode.parentNode.parentNode.getElementsByClassName("selected")[0];
  if (selected) selected.className = selected.className.replace(" selected", "");
  this.parentNode.parentNode.className += " selected";
}

function updateHighlightCheckbox() {
  var selected = this.parentNode.parentNode;
  if (!this.checked)
    selected.className = selected.className.replace(" selected", "");
  else
    this.parentNode.parentNode.className += " selected";
}

window.onload = function () {
  var radios = document.querySelectorAll("input[type=radio]");
  for (var i = 0; i < radios.length; ++i) {
    radios[i].onchange = updateHighlightRadio;
  }

  var checkboxes = document.querySelectorAll("input[type=checkbox]");
  for (var i = 0; i < checkboxes.length; ++i) {
    checkboxes[i].onchange = updateHighlightCheckbox;
  }
}
.job-manager-term-checklist {
  margin: 1em 0 0;
  padding: 0;
  list-style: none;
  overflow: hidden;
}
.job-manager-term-checklist li {
  border: 1px solid #ccc;
  overflow: auto;
  padding: 5px;
  margin-left: 5px;
  border-radius: 5px;
  background-color: #ebf1f9;
  width: 20%;
}
.job-manager-term-checklist li:hover {
  background-color: #4e83ca;
  color: #fff;
}
.job-manager-term-checklist .selected {
  background-color: #a2156b;
  color: #fff;
}
<div class="field required-field">
  <ul class="job-manager-term-checklist job-manager-term-checklist-job_category">

    <li id="job_listing_category-72" class="popular-category">
      <label class="selectit">
        <input value="72" type="radio" name="tax_input[job_listing_category][]" id="in-job_listing_category-72">1</label>
    </li>

    <li id="job_listing_category-73">
      <label class="selectit">
        <input value="73" type="radio" name="tax_input[job_listing_category][]" id="in-job_listing_category-73">2</label>
    </li>

    <li id="job_listing_category-75">
      <label class="selectit">
        <input value="75" type="radio" name="tax_input[job_listing_category][]" id="in-job_listing_category-75">3</label>
    </li>

    <li id="job_listing_category-76">
      <label class="selectit">
        <input value="76" type="radio" name="tax_input[job_listing_category][]" id="in-job_listing_category-76">4</label>
    </li>

    <li id="job_listing_category-80">
      <label class="selectit">
        <input value="80" type="radio" name="tax_input[job_listing_category][]" id="in-job_listing_category-80">5</label>
    </li>

    <li id="job_listing_category-86">
      <label class="selectit">
        <input value="86" type="radio" name="tax_input[job_listing_category][]" id="in-job_listing_category-86">6</label>
    </li>

    <li id="job_listing_category-98">
      <label class="selectit">
        <input value="98" type="radio" name="tax_input[job_listing_category][]" id="in-job_listing_category-98">7</label>
    </li>
  </ul>

  <ul class="job-manager-term-checklist job-manager-term-checklist-job_category">

    <li id="job_listing_category-72" class="popular-category">
      <label class="selectit">
        <input value="72" type="checkbox" name="tax_input[job_listing_category][]" id="in-job_listing_category-72">1</label>
    </li>

    <li id="job_listing_category-73">
      <label class="selectit">
        <input value="73" type="checkbox" name="tax_input[job_listing_category][]" id="in-job_listing_category-73">2</label>
    </li>

    <li id="job_listing_category-75">
      <label class="selectit">
        <input value="75" type="checkbox" name="tax_input[job_listing_category][]" id="in-job_listing_category-75">3</label>
    </li>

    <li id="job_listing_category-76">
      <label class="selectit">
        <input value="76" type="checkbox" name="tax_input[job_listing_category][]" id="in-job_listing_category-76">4</label>
    </li>

    <li id="job_listing_category-80">
      <label class="selectit">
        <input value="80" type="checkbox" name="tax_input[job_listing_category][]" id="in-job_listing_category-80">5</label>
    </li>

    <li id="job_listing_category-86">
      <label class="selectit">
        <input value="86" type="checkbox" name="tax_input[job_listing_category][]" id="in-job_listing_category-86">6</label>
    </li>

    <li id="job_listing_category-98">
      <label class="selectit">
        <input value="98" type="checkbox" name="tax_input[job_listing_category][]" id="in-job_listing_category-98">7</label>
    </li>
  </ul>
</div>

【讨论】:

  • 这也是一个很好的解决方案,谢谢caeth。我也尝试在 [type="checkbox"] 上实现它,checkbox 的问题是它没有标记多个复选框,只有我选择的最后一个,任何解决方案如何使它也适用于复选框?
  • @ChikoA 查看我的更新答案以了解如何处理复选框
  • 嗨,caeth,完美。非常感谢
  • 嗨 Caeth,有一种方法可以将此脚本应用于已检查的单选/复选框字段,我的意思是 - 如果我将字段设置为默认检查,当前设置不会显示 .selected div
【解决方案2】:

您可以创建一个 javascript 文件并更改元素的类,例如:

document.getElementById('id').classList.add('class');
document.getElementById('id').classList.remove('class');

您必须将您的&lt;li&gt; 更改为例如:

<li id="job_listing_category-98"><label class="selectit"><input value="98" type="radio" name="tax_input[job_listing_category][]" id="in-job_listing_category-98" onclick="changeClass(this, "someClass")">7</label></li>

希望这将为您指明正确的方向

【讨论】:

    【解决方案3】:

    如果我正确理解您的问题,您可以这样做:

     form input[type="radio"]:checked + label {
       background-color: yellow;
     }
    

    http://jsfiddle.net/4pf9cds3/

    (来源:Changing background color with CSS on radio button input when :checked

    【讨论】:

    • input[type="radio"]:checked 在父 div 上不起作用,我无法更改元素的顺序,因为我正在使用 wordpress 插件来实现此表单跨度>
    • OP 说的是 javascript 解决方案.... CSS 无法定位父元素。请仔细阅读问题。
    【解决方案4】:

    你可以这样做

    $('input[type=radio]').on('change', function() {
        $('li').each(function(){
          $(this).removeClass('active');
        });
        if($(this).prop('checked')) {
          $(this).parent().parent().addClass('active');
        }
    });
    .job-manager-term-checklist { 
        margin: 1em 0 0;
        padding: 0;
        list-style: none;
        overflow: hidden;
      }
    
    .job-manager-term-checklist li {
        border: 1px solid #ccc;
        overflow: auto;
        padding: 5px;
        margin-left: 5px;
        border-radius: 5px;
        background-color: #ebf1f9;
        width: 20%;
      }
    
    .job-manager-term-checklist li:hover { 
      background-color: #4e83ca;
      color: #fff;
      }
    .active {
      background-color: red !important;
    }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <div class="field required-field">
        					<ul class="job-manager-term-checklist job-manager-term-checklist-job_category">
    
        <li id="job_listing_category-72" class="popular-category"><label class="selectit"><input value="72" type="radio" name="tax_input[job_listing_category][]" id="in-job_listing_category-72">1</label></li>
    
        <li id="job_listing_category-73"><label class="selectit"><input value="73" type="radio" name="tax_input[job_listing_category][]" id="in-job_listing_category-73">2</label></li>
    
        <li id="job_listing_category-75"><label class="selectit"><input value="75" type="radio" name="tax_input[job_listing_category][]" id="in-job_listing_category-75">3</label></li>
    
        <li id="job_listing_category-76"><label class="selectit"><input value="76" type="radio" name="tax_input[job_listing_category][]" id="in-job_listing_category-76">4</label></li>
    
        <li id="job_listing_category-80"><label class="selectit"><input value="80" type="radio" name="tax_input[job_listing_category][]" id="in-job_listing_category-80">5</label></li>
    
        <li id="job_listing_category-86"><label class="selectit"><input value="86" type="radio" name="tax_input[job_listing_category][]" id="in-job_listing_category-86">6</label></li>
    
        <li id="job_listing_category-98"><label class="selectit"><input value="98" type="radio" name="tax_input[job_listing_category][]" id="in-job_listing_category-98">7</label></li>
        </ul>
        </div>

    【讨论】:

    • 嗨 Marcos Pérez Gude,感谢您的解决方案,到目前为止,这是我得到的最好的 :) 我还有 1 个问题:如果我设置了 1 个以上的无线电字段,则该解决方案将适用于这两个字段,这个问题有什么解决办法吗?
    • 是的,您可以管理范围,或仅在您需要的 div 中定位。例如$('#your-form input[type=radio]').
    • @Legionar 也许你认为 jQuery 是 .NET?我真的厌倦了以愚蠢和难以理解的反对票来领导。 jQuery 是 JAVASCRIPT!
    • 我不是 JS/jQuery 方面的专家,我做了一个 jsfiddle.net/9jm14nes 你能帮我处理 jquery 吗?
    • 如果要使用javascript,则添加标签javascript,如果要使用jquery,则添加标签jquery...
    【解决方案5】:

    只需使用这个小代码:

    $('input[name*="tax_input"]').change(function() {
        if($(this).is(':checked')) { // Input is checked
            $(this).parent().css('background', 'red');
        } else {
            $(this).parent().css('background', 'white');
        }
    });
    

    【讨论】:

      【解决方案6】:

      虽然您已经接受了我建议的答案,但如果使用纯 - 非库 - JavaScript 是首选,以下:

      // named function to handle the changes:
      function toggleParentStyle(opts) {
      
        // the default settings:
        var settings = {
      
            // activeClass: String, the class-name by
            // which the 'active'/'on' state is denoted:
            'activeClass': 'active',
      
            // targetElementSelector: String,
            // the CSS selector to identify the elements
            // whose style is to be altered:
            'targetElementSelector': 'li',
      
            // uniquelyActive: Boolean, determines
            // whether only one element can have the
            // 'active' state/'activeClass' class-name:
            'uniquelyActive' : true
          },
      
          // caching the 'this' Node:
          trigger = this;
      
        // iterating over the (possibly) passed-in opts
        // Object that can be used to override the
        // default settings:
        for (var prop in opts) {
      
          // if the opts Object has prop as an
          // own-property (one not inherited from
          // the Object's prototype):
          if (opts.hasOwnProperty(prop)) {
      
            // we update the relevant property of
            // the settings Object to be equal to
            // that of the opts Object:
            settings[prop] = opts[prop];
          }
        }
      
        // caching the targetElementSelector and activeClass
        // with shorter names (for convenience):
        var selector = settings.targetElementSelector,
          c = settings.activeClass,
      
        // caching the closest ancestor of the element
        // triggering the function that matches the
        // selector:
          ancestor = trigger.closest(selector),
      
        // finding the currently-active element (if any),
        // moving from the found ancestor element:
          selectedSibling = ancestor
      
        // to its parentNode:
          .parentNode
      
        // finding the first/only element in that
        // parent element that matches the selector
        // and has the class-name:
          .querySelector(selector + '.' + c);
      
        // if settings.uniquelyActive is true, and
        // there is a selected-sibling:
        if (settings.uniquelyActive && selectedSibling) {
      
          // we remove the class-name:
          selectedSibling.classList.remove( c );
        }
      
        // here we access the ancestor element's classList,
        // and if the ancestor.classList.contains the class-name
        // (Boolean true) we use the 'remove' method, if it does not
        // contain the class-name (Boolean false) we use the 'add'
        // method, and pass the class-name as an argument:
        ancestor.classList[ancestor.classList.contains( c ) ? 'remove' : 'add'](c);
      
        // Note: for radio inputs this isn't necessary, as a radio
        // can't be changed by clicking it, but this might be a
        // necessary check were check-box inputs to be used instead.
      
      }
      
      // finding all the radio-inputs in the document:
      var radios = document.querySelectorAll('input[type=radio]'),
      
      // converting the HTMLCollection into an Array, using
      // Array.prototype.slice and Function.prototype.call():
        radiosArray = Array.prototype.slice.call(radios, 0);
      
      // iterating over the radiosArray using Array.prototype.forEach():
      radiosArray.forEach(function(radio) {
      
        // binding the toggleParentStyle to handle the change
        // event of the radio inputs:
        radio.addEventListener('change', toggleParentStyle);
      });
      

      function toggleParentStyle(opts) {
        var settings = {
            'activeClass': 'active',
            'targetElementSelector': 'li',
            'uniquelyActive': true
          },
          trigger = this;
      
        for (var prop in opts) {
          if (opts.hasOwnProperty(prop)) {
            settings[prop] = opts[prop];
          }
        }
      
        var selector = settings.targetElementSelector,
          ancestor = trigger.closest(selector),
          c = settings.activeClass,
          selectedSibling = ancestor
          .parentNode
          .querySelector(selector + '.' + c);
      
        if (settings.uniquelyActive && selectedSibling) {
          selectedSibling.classList.remove(c);
        }
      
        ancestor.classList[ancestor.classList.contains(c) ? 'remove' : 'add'](c);
      
      }
      
      var radios = document.querySelectorAll('input[type=radio]'),
        radiosArray = Array.prototype.slice.call(radios, 0);
      
      radiosArray.forEach(function(radio) {
        radio.addEventListener('change', toggleParentStyle);
      });
      .job-manager-term-checklist {
        margin: 1em 0 0;
        padding: 0;
        list-style: none;
        overflow: hidden;
      }
      .job-manager-term-checklist li {
        border: 1px solid #ccc;
        overflow: auto;
        padding: 5px;
        margin-left: 5px;
        border-radius: 5px;
        background-color: #ebf1f9;
        width: 20%;
      }
      .job-manager-term-checklist li:hover {
        background-color: #4e83ca;
        color: #fff;
      }
      li.active {
        background-color: limegreen;
      }
      <div class="field required-field">
        <ul class="job-manager-term-checklist job-manager-term-checklist-job_category">
          <li id="job_listing_category-72" class="popular-category">
            <label class="selectit">
              <input value="72" type="radio" name="tax_input[job_listing_category][]" id="in-job_listing_category-72">1</label>
          </li>
          <li id="job_listing_category-73">
            <label class="selectit">
              <input value="73" type="radio" name="tax_input[job_listing_category][]" id="in-job_listing_category-73">2</label>
          </li>
          <li id="job_listing_category-75">
            <label class="selectit">
              <input value="75" type="radio" name="tax_input[job_listing_category][]" id="in-job_listing_category-75">3</label>
          </li>
          <li id="job_listing_category-76">
            <label class="selectit">
              <input value="76" type="radio" name="tax_input[job_listing_category][]" id="in-job_listing_category-76">4</label>
          </li>
          <li id="job_listing_category-80">
            <label class="selectit">
              <input value="80" type="radio" name="tax_input[job_listing_category][]" id="in-job_listing_category-80">5</label>
          </li>
          <li id="job_listing_category-86">
            <label class="selectit">
              <input value="86" type="radio" name="tax_input[job_listing_category][]" id="in-job_listing_category-86">6</label>
          </li>
          <li id="job_listing_category-98">
            <label class="selectit">
              <input value="98" type="radio" name="tax_input[job_listing_category][]" id="in-job_listing_category-98">7</label>
          </li>
        </ul>
      </div>

      JS Fiddle demo

      使用无线电&lt;input&gt; 元素显示上述内容,但传入不同的设置:

      radiosArray.forEach(function(radio) {
        radio.addEventListener('change', function () {
      
          // using Function.prototype.call()
          // to set the function's 'this' (the radio input),
          // and passing an Object as the second argument to
          // contain the Opts Object:
          toggleParentStyle.call(this, {
      
            // allowing multiple elements to be styled as active:
            'uniquelyActive' : false,
      
            // passing in a different class-name:
            'activeClass' : 'anAlternativeClassName'
          });
        });
      });
      

      function toggleParentStyle(opts) {
        var settings = {
            'activeClass': 'active',
            'targetElementSelector': 'li',
            'uniquelyActive': true
          },
          trigger = this;
      
        for (var prop in opts) {
          if (opts.hasOwnProperty(prop)) {
            settings[prop] = opts[prop];
          }
        }
      
        var selector = settings.targetElementSelector,
          ancestor = trigger.closest(selector),
          c = settings.activeClass,
          selectedSibling = ancestor
          .parentNode
          .querySelector(selector + '.' + c);
      
        if (settings.uniquelyActive && selectedSibling) {
          selectedSibling.classList.remove(c);
        }
      
        ancestor.classList[ancestor.classList.contains(c) ? 'remove' : 'add'](c);
      
      }
      
      var radios = document.querySelectorAll('input[type=radio]'),
        radiosArray = Array.prototype.slice.call(radios, 0);
      
      radiosArray.forEach(function(radio) {
        radio.addEventListener('change', function () {
          toggleParentStyle.call(this, {
            'uniquelyActive' : false,
            'activeClass' : 'anAlternativeClassName'
          });
        });
      });
      .job-manager-term-checklist {
        margin: 1em 0 0;
        padding: 0;
        list-style: none;
        overflow: hidden;
      }
      .job-manager-term-checklist li {
        border: 1px solid #ccc;
        overflow: auto;
        padding: 5px;
        margin-left: 5px;
        border-radius: 5px;
        background-color: #ebf1f9;
        width: 20%;
      }
      .job-manager-term-checklist li:hover {
        background-color: #4e83ca;
        color: #fff;
      }
      li.active {
        background-color: limegreen;
      }
      li.anAlternativeClassName {
        background-color: #f90;
      }
      <div class="field required-field">
        <ul class="job-manager-term-checklist job-manager-term-checklist-job_category">
          <li id="job_listing_category-72" class="popular-category">
            <label class="selectit">
              <input value="72" type="radio" name="tax_input[job_listing_category][]" id="in-job_listing_category-72">1</label>
          </li>
          <li id="job_listing_category-73">
            <label class="selectit">
              <input value="73" type="radio" name="tax_input[job_listing_category][]" id="in-job_listing_category-73">2</label>
          </li>
          <li id="job_listing_category-75">
            <label class="selectit">
              <input value="75" type="radio" name="tax_input[job_listing_category][]" id="in-job_listing_category-75">3</label>
          </li>
          <li id="job_listing_category-76">
            <label class="selectit">
              <input value="76" type="radio" name="tax_input[job_listing_category][]" id="in-job_listing_category-76">4</label>
          </li>
          <li id="job_listing_category-80">
            <label class="selectit">
              <input value="80" type="radio" name="tax_input[job_listing_category][]" id="in-job_listing_category-80">5</label>
          </li>
          <li id="job_listing_category-86">
            <label class="selectit">
              <input value="86" type="radio" name="tax_input[job_listing_category][]" id="in-job_listing_category-86">6</label>
          </li>
          <li id="job_listing_category-98">
            <label class="selectit">
              <input value="98" type="radio" name="tax_input[job_listing_category][]" id="in-job_listing_category-98">7</label>
          </li>
        </ul>
      </div>

      JS Fiddle demo.

      并展示它如何用于复选框:

      // selecting inputs of type=checkbox:
      var checkboxes = document.querySelectorAll('input[type=checkbox]'),
      
        // convert checkboxes HTMLCollection to an Array:
        checkboxArray = Array.prototype.slice.call(checkboxes, 0);
      
      // exactly as above, but passing in different elements:
      checkboxArray.forEach(function(check) {
        check.addEventListener('change', function () {
          toggleParentStyle.call(this, {
            // ensuring multiple checkbox ancestors can be
            // selected:
            'uniquelyActive' : false,
            'activeClass' : 'anAlternativeClassName'
          });
        });
      });
      

      function toggleParentStyle(opts) {
        var settings = {
            'activeClass': 'active',
            'targetElementSelector': 'li',
            'uniquelyActive': true
          },
          trigger = this;
      
        for (var prop in opts) {
          if (opts.hasOwnProperty(prop)) {
            settings[prop] = opts[prop];
          }
        }
      
        var selector = settings.targetElementSelector,
          ancestor = trigger.closest(selector),
          c = settings.activeClass,
          selectedSibling = ancestor
          .parentNode
          .querySelector(selector + '.' + c);
      
        if (settings.uniquelyActive && selectedSibling) {
          selectedSibling.classList.remove(c);
        }
      
        ancestor.classList[ancestor.classList.contains(c) ? 'remove' : 'add'](c);
      
      }
      
      var checkboxes = document.querySelectorAll('input[type=checkbox]'),
        checkboxArray = Array.prototype.slice.call(checkboxes, 0);
      
      checkboxArray.forEach(function(check) {
        check.addEventListener('change', function() {
          toggleParentStyle.call(this, {
            'uniquelyActive': false,
            'activeClass': 'anAlternativeClassName'
          });
        });
      });
      .job-manager-term-checklist {
        margin: 1em 0 0;
        padding: 0;
        list-style: none;
        overflow: hidden;
      }
      .job-manager-term-checklist li {
        border: 1px solid #ccc;
        overflow: auto;
        padding: 5px;
        margin-left: 5px;
        border-radius: 5px;
        background-color: #ebf1f9;
        width: 20%;
      }
      .job-manager-term-checklist li:hover {
        background-color: #4e83ca;
        color: #fff;
      }
      li.active {
        background-color: limegreen;
      }
      li.anAlternativeClassName {
        background-color: #f90;
      }
      <div class="field required-field">
        <ul class="job-manager-term-checklist job-manager-term-checklist-job_category">
          <li id="job_listing_category-72" class="popular-category">
            <label class="selectit">
              <input value="72" type="checkbox" name="tax_input[job_listing_category][]" id="in-job_listing_category-72">1</label>
          </li>
          <li id="job_listing_category-73">
            <label class="selectit">
              <input value="73" type="checkbox" name="tax_input[job_listing_category][]" id="in-job_listing_category-73">2</label>
          </li>
          <li id="job_listing_category-75">
            <label class="selectit">
              <input value="75" type="checkbox" name="tax_input[job_listing_category][]" id="in-job_listing_category-75">3</label>
          </li>
          <li id="job_listing_category-76">
            <label class="selectit">
              <input value="76" type="checkbox" name="tax_input[job_listing_category][]" id="in-job_listing_category-76">4</label>
          </li>
          <li id="job_listing_category-80">
            <label class="selectit">
              <input value="80" type="checkbox" name="tax_input[job_listing_category][]" id="in-job_listing_category-80">5</label>
          </li>
          <li id="job_listing_category-86">
            <label class="selectit">
              <input value="86" type="checkbox" name="tax_input[job_listing_category][]" id="in-job_listing_category-86">6</label>
          </li>
          <li id="job_listing_category-98">
            <label class="selectit">
              <input value="98" type="checkbox" name="tax_input[job_listing_category][]" id="in-job_listing_category-98">7</label>
          </li>
        </ul>
      </div>

      JS Fiddle demo.

      参考资料:

      【讨论】:

      • 嗨 David Thomas,感谢您详细的回答,我有 2 个问题: 1. 最好通过 jQuery 或其他库来实现它(我正在使用 wordpress-所以构建了 jquery -在 )? 2. 如何使用您发布的第一种方法用于同一个表单上的单选按钮和复选框按钮?
      【解决方案7】:

      坏消息是你不能只使用 CSS 来做到这一点,因为 CSS 选择器是如何工作的。

      好消息是,您只需选择输入的同级,使其覆盖整个父级并更改其背景颜色,就可以使用 CSS 做一些非常接近您想要的事情。

      【讨论】:

      • OP 说的是 javascript 解决方案.... CSS 无法定位父元素。请仔细阅读问题。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多