2014-01-13 52 views
0

這是我的代碼,這裏有6複選框,並調用它6次,每次它使這兩個值的總和,我傳遞值一樣10,10比它應該是一個20,但它返回120, 我怎樣才能解決這個問題問題?jQuery中的複選框值計數?

jQuery('.pricefield input').each(function() { 
    var checkedValues = jQuery('input:checkbox:checked').map(function() { 
    str=this.value; 
    source_str = str.substr(str.indexOf("#")); 
    keywords = source_str.split (/[\D,]+/); 
    val1=keywords[1]; 
    val2=keywords[2]; 
    sum+=parseInt(val1, 10)+parseInt(val2, 10); 
    alert(sum); 
    pricefield_both(sum); 
    }).get(); 
}); 
+0

雅那之後多了一個位置,我故障已經是+符號 –

+0

你可以做一個jsfiddle.net – mplungjan

+0

http: //jsfiddle.net/H3rLw/ –

回答

1

你不看正確的指標,你需要的#

Live Demo

$(function() { 
    $('.pricefield input').on("click",function() { 
    var sum=0; 
    $('input:checkbox:checked').each(function() { 
     var str=$(this).val().split("#")[1].split(","); 
     sum += (parseInt(str[0], 10) + parseInt(str[1], 10)); 
    }); 
    pricefield_both(sum); // assuming that function works 
    }); 
});  
+0

我的代碼運行良好,但是如果複選框被選中或者沒有超過之前的值,那麼它會在每次複製瓦洛總和 –

+0

請參閱更新 – mplungjan

-1
keywords = source_str.split (/[\D,]+/); 
val1=keywords[1]; 
val2=keywords[2]; 
sum+=parseInt(val1, 10)+parseInt(val2, 10); 

這個代碼是沒有好!

嘗試類似波紋管的東西!

keywords = source_str.split(/[\D,]+/); 
val1 = +keywords[1]; 
val2 = +keywords[2]; 
sum += val1 + val2; 

我建議你先定義變量,這樣局部變量將不會成爲全局可訪問的!

var str, source_str, keywords, val1, val2, sum; 

結果是波紋管:

var str, source_str, keywords, val1, val2, sum = 0; 
jQuery('.pricefield input').each(function() { 
    var checkedValues = jQuery('input:checkbox:checked').map(function() { 
    str=this.value; 
    source_str = str.substr(str.indexOf("#")); 
    keywords = source_str.split (/[\D,]+/); 
    val1 = +keywords[1]; 
    val2 = +keywords[2]; 
    sum += val1 + val2; 
    alert(sum); 
    pricefield_both(sum); 
    }).get(); 
}); 
+0

除了定義變量是一件好事之外,parseInt有什麼問題?假設正則表達式正確的+關鍵字[1]和parseInt(關鍵字[1],10)的相同行爲 – mplungjan

+0

它只是簡短的。 – jingyinggong

+0

但你說過「這不好」 - 如果它有效,它的作用與你的代碼相同。還有其他事情正在進行,例如正則表達式沒有選擇正確的值。我的代碼中沒有看到任何結構性變化。 – mplungjan