【问题标题】:Access the nested path of the input elements访问输入元素的嵌套路径
【发布时间】:2018-03-04 18:26:31
【问题描述】:

HTML:

<div id="quiz">
<div id="question">
    <p id="quiz-txt">Your Name is:</p>
    <ul id="quiz-opt">
        <div id="ans">
            <input type="checkbox" id="Bob" value="Bob" class="options">
            <label for="Bob">Bob</label>
        </div>
        <div id="ans">
            <input type="checkbox" id="David" value="David" class="options">
            <label for="David">David</label>
        </div>
        <div id="ans">
            <input type="checkbox" id="Jack" value="Jack" class="options">
            <label for="Jack">Jack</label>
        </div>
    </ul>
</div>
.
.
.
.
<div id="question">
    <p id="quiz-txt">This is the final question.</p>
    <ul id="quiz-opt">
        <div id="ans">
            <input type="checkbox" id="Yes" value="Yes" class="options">
            <label for="Yes">Yes</label>
        </div>
        <div id="ans">
            <input type="checkbox" id="No" value="No" class="options">
            <label for="No">No</label>
        </div>
    </ul>
</div>

大约有 10 个 divs(问题)是在旅途中创建的(从服务器获取数组)。

那么,我的问题是如何获取选中的复选框的值?

这是我在 JavaScript 中尝试过的:

$('#quiz').children('#question').children('#quiz-opt').children('#ans').children('.options:checked').each(function () {
    console.log($(this).val());
});

【问题讨论】:

    标签: javascript jquery html checkbox


    【解决方案1】:

    这个(尽管是免费的)解决方案对我有用。选中一些框,然后单击检查按钮

    function check() {
      document.querySelectorAll(".options:checked").forEach(el => {
        console.log(el.value);
      });
      console.log("-----------------------");
    }
    <div id="quiz">
    <div id="question">
        <p id="quiz-txt">Your Name is:</p>
        <ul id="quiz-opt">
            <div id="ans">
                <input type="checkbox" id="Bob" value="Bob" class="options">
                <label for="Bob">Bob</label>
            </div>
            <div id="ans">
                <input type="checkbox" id="David" value="David" class="options">
                <label for="David">David</label>
            </div>
            <div id="ans">
                <input type="checkbox" id="Jack" value="Jack" class="options">
                <label for="Jack">Jack</label>
            </div>
        </ul>
    </div>
    .
    .
    .
    .
    <div id="question">
        <p id="quiz-txt">This is the final question.</p>
        <ul id="quiz-opt">
            <div id="ans">
                <input type="checkbox" id="Yes" value="Yes" class="options">
                <label for="Yes">Yes</label>
            </div>
            <div id="ans">
                <input type="checkbox" id="No" value="No" class="options">
                <label for="No">No</label>
            </div>
        </ul>
    </div>
    
    <button onClick="check()">Check values</button>

    【讨论】:

    • 是的,它工作得很好,而且更简单。谢谢
    • 你不需要Array.from()
    • @RacilHilan 是的。 document.querySelectorAll返回一个NodeList,它没有很多像forEach这样的数组方法,所以我必须把它转换成数组
    • 为什么不先尝试一下再回复?删除Array.from(),看看你的答案是否仍然有效。那么也许你可以read and learn 一些东西。
    【解决方案2】:

    你不需要所有的路径,它的最后一点就足够了$('.options:checked')。也无需将this 转换为jQuery 对象,只需访问其JavaScript value 属性即可:

    function check() {
      $('.options:checked').each(function() {
        console.log(this.value);
      });
    }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <div id="quiz">
      <div id="question">
        <p id="quiz-txt">Your Name is:</p>
        <ul id="quiz-opt">
          <div id="ans">
            <input type="checkbox" id="Bob" value="Bob" class="options">
            <label for="Bob">Bob</label>
          </div>
          <div id="ans">
            <input type="checkbox" id="David" value="David" class="options">
            <label for="David">David</label>
          </div>
          <div id="ans">
            <input type="checkbox" id="Jack" value="Jack" class="options">
            <label for="Jack">Jack</label>
          </div>
        </ul>
      </div>
      . . . .
      <div id="question">
        <p id="quiz-txt">This is the final question.</p>
        <ul id="quiz-opt">
          <div id="ans">
            <input type="checkbox" id="Yes" value="Yes" class="options">
            <label for="Yes">Yes</label>
          </div>
          <div id="ans">
            <input type="checkbox" id="No" value="No" class="options">
            <label for="No">No</label>
          </div>
        </ul>
      </div>
      <button type="button" onclick="check()">Check</button>

    【讨论】:

    • 哇。所以它会自动遍历路径。学到了新东西。是的,我将直接使用this.value。谢谢
    • 是的,既然您已经在使用 jQuery,那么这个答案是最好的方法。如果您不使用 jQuery 并且不关心支持旧浏览器,那么使用 querySelectorAll() 也是一个不错的选择。
    猜你喜欢
    • 2021-07-09
    • 1970-01-01
    • 1970-01-01
    • 2021-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多