2012-10-20 37 views
0

我有一個包含X組的價格值爲複選框的表單。 我已經爲每個組分配了一個條件。總結複選框的值,並帶有 - 最小選定條件

讓我們假設我們有2組:

第一組條件:總和的所有值一起,除了第3選擇 (NOT在索引中的第一個3,但選擇的第一3和之後每選擇)

第二組條件:總和的所有值一起,除了第2選擇 (NOT第一2中的索引,但選擇的第一2和之後每選擇)

var minLimit1 = 3; 
var minLimit2 = 2; 

$(":input", "#myForm").each(function(){ 

    if(this.type == 'checkbox'){ 



    } 

}); 

我如何使用jQuery或普通js實現這一點?

編輯:樣表CODE

<form id="myForm"> 
<fieldset class="required"> 
    <input type="checkbox" value="1.30" name="group1" id="id-1"> 
    <label for="id-1"><span>Component 1</span><em>(€1.30)</em></label> 

    <input type="checkbox" value="1.00" name="group1" id="id-2"> 
    <label for="id-2"><span>Component 2</span><em>(€1.00)</em></label> 

    <input type="checkbox" value="0.50" name="group1" id="id-3"> 
    <label for="id-3"><span>Component 3</span><em>(€0.50)</em></label> 

    <input type="checkbox" value="0.25" name="group1" id="id-4"> 
    <label for="id-4"><span>Component 4</span><em>(€0.25)</em></label> 

    <input type="checkbox" value="1.75" name="group1" id="id-5"> 
    <label for="id-5"><span>Component 5</span><em>(€1.75)</em></label> 

    <input type="checkbox" value="2.00" name="group1" id="id-6"> 
    <label for="id-6"><span>Component 6</span><em>(€2.00)</em></label> 
</fieldset> 

<fieldset class="required"> 
    <input type="checkbox" value="1.20" name="group2" id="id-7"> 
    <label for="id-7"><span>Component 1</span><em>(€1.20)</em></label> 

    <input type="checkbox" value="1.10" name="group2" id="id-8"> 
    <label for="id-8"><span>Component 2</span><em>(€1.10)</em></label> 

    <input type="checkbox" value="0.40" name="group2" id="id-9"> 
    <label for="id-9"><span>Component 3</span><em>(€0.40)</em></label> 

    <input type="checkbox" value="0.35" name="group2" id="id-10"> 
    <label for="id-10"><span>Component 4</span><em>(€0.35)</em></label> 

    <input type="checkbox" value="1.15" name="group2" id="id-11"> 
    <label for="id-11"><span>Component 5</span><em>(€1.15)</em></label> 

</fieldset> 
</form> 

注:我想要最新的點擊並進一步在總結加入,而不是最後的指數。

+2

爲了提供一些HTML看你怎麼組複選框和排除元素的更好解釋 – charlietfl

+0

JSFIDDLE.net是一個可以顯示代碼的地方 – mplungjan

+0

我的html是動態創建的。它可以有1到x個分組複選框。其中一些可能具有上述解釋的條件。 我正在使用.each方法來讀取表單中的所有元素,並根據用戶選擇決定哪個元素進行求和。 – mallix

回答

1

我認爲這個解決方案可以滿足您的需求。演示添加類值的標籤被計算爲使其更容易determin這個概念是正確的

DEMO:http://jsfiddle.net/MTJtF/2

/* can store values in array, or as data attribute of html */ 

var min_limits = [3, 2]; 

$('#myForm .required input:checkbox').change(function() { 
    var $group = $(this).closest('fieldset.required') 
    var parentIdx = $('fieldset.required').index($group); 
    /* can store values in array, or as data attribute of html */ 
    var minLimit = $group.data('min_limit') || min_limits[parentIdx]; 
    var $selected = $group.find(':checked').slice(minLimit); 
    $group.find('.counted').removeClass('counted') 
    var sum = 0; 
    if ($selected.length) { 
     $selected.each(function() { 
      sum +=1*$(this).val(); 
      $(this).next().addClass('counted') 
     }) 

    } else { 
     sum = 'Limit not met'; 
    } 

    $group.find('.sum').text('Sum= '+sum) 

}) 

+0

中的最後一個,您的解決方案與我們開爾文一樣。它將根據索引添加最後一個值,而不是最新的點擊。 如果我從第二組中檢查組件1,然後是組件3,然後是2,它將索引中的最後一個複選框的值相加,即組件3. 第一組複選框的結果相同 – mallix

+1

行..您的解釋不是完全清楚(請參閱請求以獲得更好的解釋)嘗試此版本:http://jsfiddle.net/MTJtF/3/代碼可能會被重構一點點以減輕它,但是當從一個版本更改爲另一個版本時不值得簡化直到確定它可以工作 – charlietfl

+0

它就像一個魅力!我很抱歉從一開始就沒有100%清楚。我不確定在我的.each實現中如何使用它。 – mallix

0

傳遞給$.each()的第一個參數是index,這在這裏會有所幫助。

在這段代碼中,我們假設您的複選框被fieldset元素與類"group1""group2"分組等

var conditions = { 
     group1: 3, 
     group2: 2 
    }, 
    total = 0, 
    key, condition; 

// Loop through all the conditions 
for (key in conditions) { 
    condition = conditions[key]; 
    // Loop through all the checked checkboxes in fieldset.group1, fieldset.group2, etc 
    $('input[type="checkbox"]:checked', '#myForm fieldset.' + key).each(function(inputIndex) { 
     // Check if the current checkbox's index is higher than the minimum 
     if ((inputIndex + 1) > condition) { 
      total += parseFloat($(this).val()); 
     } 
    }); 
} 

例子:http://jsfiddle.net/QfSxw/2/

編輯:簡化代碼相當

+0

我希望最新點擊被添加,而不是索引 – mallix

0

我我不知道我是否正確理解這些複選框的格式,但我假設您可以分辨第1組複選框和第2組複選框之間的區別。如果是這樣,我會建議跟蹤已標記的複選框的數量,以瞭解何時開始總結這些值。例如:

// The minimum number that must be checked 
var minLimit1 = 3; 
var minLimit2 = 2; 
// The number checked per group 
var numGroup1 = 0; 
var numGroup2 = 0; 
//The sum of the checkboxes over the group's minLimit that are checked 
var sumGroup1 = 0; 
var sumGroup2 = 0; 

$(":input", "#myForm").each(function() { 
    if ((this.type == 'checkbox') && (this.checked == true)) { 
     // This code is just for Group 1 right now. Depending on how you differentiate 
     // between each group, you could either have a check in here for each group 
     // (or some kind of loop if the number of groups is variable), or have a separate 
     // each statement for each group. 

     if (numGroup1 >= minLimit1) { 
      // If the minLimit has already been reached, then increment the sum 
      sumGroup1++; 
     } 

     numGroup1++; 
    } 
}); 
相關問題