2016-03-22 5 views
3

私は、HTMLチェックボックスやラジオボタンのようなフォーム要素を持つリストを作成しています。彼らの動的なIDforの値を対応するLABELタグに与えたいと思います。このすべてがJQuery/JavaScriptを使用します。動的IDを数え、javascriptを使用してフォーム要素の値を追加します。

私はJavaScriptを

dynamic ID and FOR values using Jquery/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>

+1

どのようにリストを生成/作成していますか? 動的であれば、バックエンドで実装してみませんか?それとも、ハードコーディングされていますか? –

+0

ハードコーディングされています!実際には、私はJavascriptを学んでいます。それでは、JavaScript/JQueryを使用して行う方法を知っておく必要があります –

+0

まだ学習しているなら、純粋なJSを学び、jQueryから始めることを強くお勧めします。 –

答えて

2

に良いことはないです。この

$(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>
のようなものを試してみてください10

+1

追加する前に、入力IDがすでに存在するかどうか確認する必要がありますか?また、すでに存在するIDがある場合は、新しい要素に同じIDを使用しないでください。 – skobaljic

+0

答えを更新しました。アドバイスをいただきありがとうございます。 – Alexis

+0

私はこのセレクタ '$("。product-menu li input [id] ")'を使用して既存のIDのリストを見つけ、配列に入れます。以前の配列にはない新しいIDをループして割り当てるには、 '$(" product-menu li input:not([id]) ")'を使用します。 – skobaljic

1

以下のコードは、各liのinputとforのラベルにdynamicを追加します。 ここでは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); 
     }); 
    }); 
1

は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)); 
} 
+0

これは第1のli要素では機能しませんでした –

+0

var i = 1の代わりにvar i = 1を残しました。 –

関連する問題