2011-04-28 45 views
2

我與幾個checkbox的,用戶可以選擇多個值,像這樣得到了formjQuery的 - 從HTML元素中檢索值,並返回它們的總和

<div> 
    <input id="myinput1" type="checkbox" value="choice_id_1" /> 
    <label for="myinput1">5</label> 
</div> 
<div> 
    <input id="myinput2" type="checkbox" value="choice_id_2" /> 
    <label for="myinput2">10</label> 
</div> 
<div> 
    <input id="myinput3" type="checkbox" value="choice_id_3" /> 
    <label for="myinput3">10</label> 
</div> 

我需要從每個:selected獲取值複選框label並返回它們的總金額(即:總計= 25)

到目前爲止,我一直在試圖獲得來自labelsstrings.text()方法,使一個array的結果,將它們轉換爲intparseFloat(),總結數組元素... obviosly沒有成功。

這是我得到(肯定不是最好的方法,所以我開到diferent解決方案)

function totalSum() { 
    var prices = $("input:checkbox:checked").siblings("label").text(); 
    var myArray = $.makeArray(prices); 

    var total = 0; 
    for(var i = 0; i < myArray.length; i++){ 
     var thisVal = parseFloat(myArray[i]); 
     if(!isNaN(thisVal)){ 
      total += thisVal; 
     } 
    }; 

    $(".mydiv").text(total); 
}; 

totalSum(); 
$("input:checkbox").change(totalSum); 

回答

0

好一件事每個複選框的value部分更改爲相同的標籤的價值(如果你不能做到這一點,你可以利用輸入的name屬性如下圖所示):

<div> 
    <input id="myinput2" type="checkbox" value="choice_2" name="10"/> 
    <label for="myinput2">10</label> 
</div> 

,然後JS可以是這樣的:

function totalSum() { 
    var prices = $("input:checkbox:checked"); 

    var total = 0; 

    $.each(prices, function(index, obj){ 
     total += parseFloat($(obj).attr('name')); 
    }) 


    $(".mydiv").text(total); 
}; 
+0

對不起,認爲最好不要與其他代碼的問題複雜化。事情是我不能使用複選框中的值來做到這一點,因爲我已經在使用它來將結果發送到數據庫了。值是我如何識別用戶選擇的選項。 (編輯我的問題) – nienn 2011-04-28 21:33:28

+0

@nienn看到我的更新 – Neal 2011-04-28 21:37:04

+0

好的。由於我無法使用名稱attr(抱歉過分簡化),我創建了一個新的輸入[type = hidden],並將我想要的值(我從php獲得)複製到此輸入值attr。現在你的第一個建議很完美! Thx =) – nienn 2011-04-28 22:22:19

1

的解決方案是如下,你可以去here嘗試演示

<form id="sum" action="#"> 
<div><input id="myinput1" type="checkbox" value="choice_id_1" /> 
<label for="myinput1">5</label></div> 
<div><input id="myinput2" type="checkbox" value="choice_id_2" /> 
<label for="myinput2">10</label></div> 
<div><input id="myinput3" type="checkbox" value="choice_id_3" /> 
<label for="myinput3">10</label></div> 
<input class="submit" type="submit" value="Submit" /> 
<div id="result"></div> 
</form> 

<script type="text/javascript"> 
jQuery(document).ready(function() { 
    jQuery('.submit').click(function(event){ 
    var sum = 0; 
    jQuery('form#sum').find(':checkbox').each(function() { 
     if (jQuery(this).is(':checked')) { 
     var labelVal = parseInt(jQuery(this).next().text()); 
     sum +=labelVal; 
     } 
    }); 
    jQuery('#result').text('The total is ' + sum); 
    }); 
}); 
</script> 
+0

這也解決了它。我已經用var price = $(「input:checkbox:checked」).siblings(「label」)解決了我的問題,然後使用@ Neal的答案的其餘部分,因此不需要額外的標記。我必須保留@ Neal的答案,因爲他是第一個回答,真正解決了我的問題。 Thx爲非常啓發性的例子思想=) – nienn 2011-04-30 12:20:08