jQuery умножьте только значения, которые не скрыты

StackOverflow https://stackoverflow.com/questions/4805147

  •  24-10-2019
  •  | 
  •  

Вопрос

Я размышляю о том, как вы бы добавили все значения входов с определенными именами через jQuery, если их контейнерный Div установлен для отображения блока.

Что -то ссылка if ($('#product_' + this.alt).css('display','block')) {

Тогда это должно сложиться .each С привлечением ввода что -то подобное.

$('#product_price_total_PRI_' + this.alt).val

Есть идеи о том, как я бы собрал все это вместе?

Редактировать:

Очевидно, я должен уточнить. В ALT Tag из нескольких флажков и радиопроизводительных кнопок - это идентификатор, который соответствует идентификаторам скрытых контейнеров и полей. Поэтому комбинация кнопок и флажок, которые проверяются, определяет, какие скрытые области видны, как видно здесь.

function product_analysis_global() {
$(':checked').each(function(){
    $('#product_' + this.alt).css('display','block');
    $('#product_quantity_PRI_' + this.alt).val(this.value);
    var quantity = $('#product_quantity_PRI_' + this.alt).val();
    var price = $('#product_price_PRI_' + this.alt).val();
    var duration = $('#product_duration_PRI_' + this.alt).val();
    var dives = $('#product_dives_PRI_' + this.alt).val();
    var hire = $('#product_quantity_PRI_' + this.alt).val();

    $('#product_price_total_PRI_' + this.alt).val(price * quantity);
    $('#product_duration_total_PRI_' + this.alt).val(duration * quantity);
    $('#product_dives_total_PRI_' + this.alt).val(dives * quantity);
    $('#product_hire_total_PRI_' + this.alt).val(hire * quantity);

}); 

Что мне нужно, так это поле, называемое «gt_grand_total», чтобы быть суммой всех полей, которые обладают '#product_price_total_PRI_' + this.alt).val()' Только если их панель '#product_' + this.alt видно.

Это было полезно?

Решение

В соответствии с вашим требованием

var arr = $("div[id*='product_']").not(":hidden").map(function(){
  return $(this).find("input[id*='product_price_total_PRI_']").val();
}).get(); 



var total = 0;
$.each(arr,function() {
    total += parseInt(this);
});
alert(total);

Или для общего

var total = eval(arr.join('+'));

alert(total);

Рабочий пример

http://jsfiddle.net/wb5hh/2/

Другие советы

Если элементы, отображаемые без блока, не видны, вы можете использовать jQuery :visible селектор

if ($('#product_' + this.alt).is(":visible")) {...}

http://api.jquery.com/visible-selector/

var sum = 0;
$("#specific_name_1, #specific_name_2").not(":hidden").each(function(){
    var i = parseInt($(this).val(), 10);
    if(i){
        sum += i;
    }
});
$("#grand_total").val(sum);

Определение: скрытый селекторhttp://api.jquery.com/hidden-selector/

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top