【问题标题】:Count and add Dynamic ID and for values for form elements using javascript使用 javascript 计算并添加动态 ID 和表单元素的值
【发布时间】:2016-03-23 17:39:05
【问题描述】:

我正在创建一个列表,其中包含一些表单元素,如 html 复选框或单选按钮。我想将动态的IDfor 值赋予其对应的LABEL 标签。除了使用 JQuery/JavaScript 之外的所有这些。

我的 JavaScript 不太好

$(document).ready(function() {
  function {
    var count = 0;
    var total = $('.product-menu li').length();

  }
});
.product-menu {
  display: block;
  list-style: none;
  margin: 0;
  padding: 0;
}
.product-menu li {
  display: list-item;
  line-height: 2;
}
.product-menu label {
  font-weight: normal;
  vertical-align: middle;
  padding-left: 10px;
  display: inline-block;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<ul class="product-menu">
  <li>
    <input type="checkbox" id="pm-1">
    <label for="pm-1">New Arrivals</label>
  </li>
  <li>
    <input type="checkbox" id="pm-2">
    <label for="pm-2">Accessories</label>
  </li>
  <li>
    <input type="checkbox" id="pm-3">
    <label for="pm-3">Bags</label>
  </li>
  <li>
    <input type="checkbox" id="pm-4">
    <label for="pm-4">Jackets</label>
  </li>
</ul>

【问题讨论】:

  • 你是如何创建/生成列表的?如果是动态的,为什么不在后端实现呢?还是硬编码?
  • 它是硬编码的!实际上,我正在学习 Javascript。所以需要知道,如何使用 JavaScript/JQuery 来做到这一点
  • 如果你还在学习,我强烈建议你学习纯JS,而不是从jQ​​uery开始。

标签: javascript jquery html


【解决方案1】:

试试这样的

$(document).ready(function() {
    $(".product-menu li").each(function(index){
        var id=$(this).find("input").attr("id");
        if(id== undefined)
        {
          $(this).find("input").prop("id","pm-"+index);
          $(this).find("label").prop("for","pm-"+index);
        }
        else
        {
          $(this).find("label").prop("for",id);
        }
    });
});
.product-menu {
    display: block;
    list-style: none;
    margin: 0;
    padding: 0;
}
.product-menu li {
    display: list-item;
    line-height: 2;
}
.product-menu label {
    font-weight: normal;
    vertical-align: middle;
    padding-left: 10px;
    display: inline-block;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<ul class="product-menu">
    <li>
        <input id="test" type="checkbox" >
        <label >New Arrivals</label>
    </li>
    <li>
        <input type="checkbox">
        <label >Accessories</label>
    </li>
    <li>
        <input type="checkbox">
        <label>Bags</label>
    </li>
    <li>
        <input id="test2" type="checkbox">
        <label >Jackets</label>
    </li>
</ul>

【讨论】:

  • 也许你应该在添加之前检查输入 ID 是否已经存在?此外,如果已经存在 ID,则不应在新元素上使用相同的 ID。
  • 我会使用这个选择器 $(".product-menu li input[id]") 来查找现有 ID 的列表并将它们放入数组中。比我使用 $(".product-menu li input:not([id])") 循环和分配新的 ID,这不在以前的数组中。
  • @skobaljic 感谢您的评论!我确实有多个列表,因此 ID 可能会重复
【解决方案2】:

下面的代码将动态添加到输入中,并将 for 添加到每个 li 中的标签中。 这里index每个都以0开头。

$(document).ready(function() {  
      $(".product-menu li").each(function(index){
         $(this).find("input").attr("id","pm-"+index);
        $(this).find("label").attr("for","pm-"+index);  
        });
    });

【讨论】:

    【解决方案3】:

    JavaScript:

    var list = document.getElementsByClassName("product-menu")[0].children;
    var listLen = list.length;
    
    for( var i = 0; i<=listLen; i++) {
        list[i].firstElementChild.id = "pm-"+(i+1);
        list[i].lastElementChild.setAttribute("for", "pm-"+(i+1));
    }
    

    【讨论】:

    • 我留下了 var i = 1 而不是 var i = 0。已编辑。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-24
    • 1970-01-01
    相关资源
    最近更新 更多