2013-04-22 103 views
0

我無法讓我的var接受多個輸入。多選複選框值

當我選擇一個複選框時,它顯示我的值,但是,當我選擇了我得到undefined錯誤。

的JavaScript

window.onload = function() { 
    var input= document.querySelectorAll('input#add2basket'); 
    var radio= document.querySelectorAll('input#hi'); 
    for (var j=0; j < radio.length; ++j){//loops over buttons 
     radio[j].onclick = function(){// find radio button 
var input = findChecked(this.name); 
alert (input.value) 
return false; 
// determine pizza size 
//var size = input.value==='1'?‘Small':(input.value==='2'?'Regular':'Large'); 
// determine pizza price 
//var price =Number(input.getAttribute('data‐price')); 
// add a ‘new’ pizza to the basket 
//addToBasket(newPizza(this.name,size, price)); 
}; 
}; 

function findChecked(name){ 
var css = 'input#hi[name="'+name+'"]'; 
var inputs = document.querySelectorAll(css); 
var checked = _.filter(inputs, function (input){ 
document.write('<pre>'+input.checked+'</pre>') 

return input.checked; 

}); 
return checked.length===1?checked[0]:null; 
} 

} 

HTML

<div> 
       <fieldset> 
        <legend class="Topping">Topping</legend> 

        <ul> 

         <li class="lastset"><input class="cbox" id="hi" name= 
         "top" type="checkbox" value="1"> <label class= 
         "box">Double Cheese</label></li> 

         <li class="lastset"><input class="cbox" id="hi" name= 
         "top" type="checkbox" value="2"> <label class= 
         "box">Peppers</label></li> 

         <li class="lastset"><input class="cbox" id="hi" name= 
         "top" type="checkbox" value="3"> <label class= 
         "box">Pepperoni</label></li> 

         <li class="lastset"><input class="cbox" id="hi" name= 
         "top" type="checkbox" value="4"> <label class= 
         "box">Olives</label></li> 

         <li class="lastset"><input class="cbox" id="hi" name= 
         "top" type="checkbox" value="5"> <label class= 
         "box">Beef</label></li> 

         <li class="lastset"><input class="cbox" id="hi" name= 
         "top" type="checkbox" value="6"> <label class= 
         "box">Seafood</label></li> 
        </ul> 
       </fieldset> 
      </div><!-- end topping --> 
     </form> 

     <div id="actionbtn"> 
      <!--== action buttons==--> 
      <input class="apply" type="button" value= 
      "Back To Menu"> 
      <input class="apply" name="top" id="add2basket" id="actionbtn2" type="button" 
      value="Proceed"> 
     </div><!--==end of action buttons==--> 

當我打印input.checked,它顯示了選擇框爲真實的,但我在哪裏從那裏

JavaScript的解決方案去只請。

回答

0

屬性id在整個文檔中必須是唯一的。

<li class="lastset"><input class="cbox" id="hi" name= 
        "top" type="checkbox" value="6"> <label class= 
        "box">Seafood</label></li> 

更新的代碼:

<li class="lastset"><input class="cbox" id="hi_1" name= 
        "top" type="checkbox" value="6"> <label class= 
        "box">Seafood</label></li> 

(每一個li做到這一點,並給每個li自己的ID,如果你真的需要在li標籤

的ID來獲得所有的輸入,使用不同的選擇器,如class-屬性:

var css = 'input.cbox[name="'+name+'"]'; 
var radio= document.querySelectorAll('input.cbox'); 
+0

對此沒有實際限制。大多數瀏覽器會檢索找到的第一個「id」。 – 2013-04-22 07:42:39

+0

@MichaelSazonov,但它仍然是一個不好的做法。 – 2013-04-22 07:43:09

+0

@當然是了!我只是想幫助作者改進他的答案。 – 2013-04-22 07:45:27

0

類名只要選擇複選框(和不重複的id):

window.onload = function() { 
    var input = document.querySelectorAll('input#add2basket'); 
    var radio = document.querySelectorAll('input.cbox'); 

    for (var j = 0; j < radio.length; j++) { 
     radio[j].onchange = function() { 
      var input = findChecked(this.name); 
      return false; 
     }; 
    }; 

    function findChecked(name) { 
     var css = 'input.cbox:checked'; 
     var inputs = document.querySelectorAll(css); 
     return inputs; 
    } 
} 

Pluss可以簡化檢查只能用:checked僞選擇的選擇。

http://jsfiddle.net/BPFTp/1/

+0

hi mate,我使用_.filter的原因是因爲它返回一個值數組,所以我可以檢查多個框並通過向輸入項添加額外屬性來計算價格。編號喜歡能夠檢查多個框,並獲得他們的價值顯示。再次感謝 – user2306312 2013-04-22 08:24:25