2015-06-02 3 views
1

Используя библиотеку iCheck У меня есть основной HTML:
iCheck сумма и вычитать значения

<form> 
    <input type="radio" name="pks" value="1"> 
    <input type="radio" name="pks" value="2"> 
    <input type="radio" name="pks" value="3"> 
    <hr> 
    <input type="checkbox" name="op1" value="10"> 
    <input type="checkbox" name="op2" value="20"> 
    <input type="checkbox" name="op3" value="30"> 
    <input type="checkbox" name="op4" value="40"> 
</form> 

Итак у меня есть JQuery:

$('input[name="pks"]').on('ifChecked', function(e) { 
    var $pkss = $(this).val(); 
    $('input[type="checkbox"]').on('ifChecked', function(ev) { 
     var $ops = $(this).val(); 
     sum = parseFloat($pkss) + parseFloat($ops); 
     // alert(sum); 
     $('#tt').text(sum) 
    }); 
    $('input[type="checkbox"]').on('ifUnchecked', function(ev) { 
     var $ops = $(this).val(); 
     sum = parseFloat($pkss) - parseFloat($ops); 
     // alert(sum); 
     $('#tt').text(sum) 
    }); 

}); 

То, что я пытаюсь выполнить очень просто без использования iCheck, но так как я изучаю эту библиотеку и нет документации для такого рода операций с помощью iCheck (я не мог найти ее) Мне нужно «суммировать» значения с радиовхода на checkbox
i f радиовход 1, тогда значение равно 1, затем проверьте, был ли установлен флажок, если это так, затем суммируйте это значение с переключателем, который был проверен:
: 1radio + 10checkbox = 11, поэтому 11 - это мой но если:
2radio + 10checkbox + 40checkbox then = 52 ... correct ?, но если пользователь снимет галочку с одного из этих флажков, то вычтите это значение ... с кодом выше малыша, вида работы ... Мне удается суммировать один радио и один флажок, но если я выберу другой переключатель, он ничего не сделает, пока я не выберу еще один флажок, но он игнорирует первый флажок, и когда я снимаю флажок, это дает мне неправильный результат ... I не может заставить его работать с помощью iCheck ...

ответ

0

Самый простой способ добиться этого - иметь единственную функцию, которая работает на change как радио, так и флажков. Затем эта функция будет суммировать значения всех выбранных элементов вместо добавления/удаления текущего значения из накопленной суммы.

Попробуйте это:

$(':radio, :checkbox').change(updateTotal); 

function updateTotal() { 
    var total = 0; 
    $(':radio:checked, :checkbox:checked').each(function() { 
     total += parseInt(this.value); 
    }); 
    console.log(total); 
} 

Example fiddle

+0

Yup, что сделал это, что я не хватало ** ifChanged ** используя код первой, как должна быть строка '$ (': радио, : checkbox '). on (' ifChanged ', updateTotal); 'и остальное остается прежним, теперь работает! Спасибо! – Tanker

Смежные вопросы