Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何仅确保变量数匹配而不必硬编码所有可能的匹配ID?_Javascript_Jquery_Arrays_Django_Django Forms - Fatal编程技术网

Javascript 如何仅确保变量数匹配而不必硬编码所有可能的匹配ID?

Javascript 如何仅确保变量数匹配而不必硬编码所有可能的匹配ID?,javascript,jquery,arrays,django,django-forms,Javascript,Jquery,Arrays,Django,Django Forms,我最近熟悉了Jquery选择器……它们工作得很好。以…开始以…结束 我目前的问题是,我所有的变量名基本上都以相似的模式开始,以相似的模式结束。这个ID是从其他地方生成的,所以我希望我能做些事情来有效地使用它 模式ID格式基本上看起来像 "#id_newbudgetlineitem_set-0-line_item_october" "#id_newbudgetlineitem_set-0-line_item_november" "

我最近熟悉了Jquery选择器……它们工作得很好。以…开始以…结束

我目前的问题是,我所有的变量名基本上都以相似的模式开始,以相似的模式结束。这个ID是从其他地方生成的,所以我希望我能做些事情来有效地使用它

模式ID格式基本上看起来像

   "#id_newbudgetlineitem_set-0-line_item_october" 
   "#id_newbudgetlineitem_set-0-line_item_november"
   "#id_newbudgetlineitem_set-0-line_item_december"  
我想在集合-*上进行基本匹配,但前提是它与数组中的其他ID相同。甚至不必在set-0到set-1000之间的任何地方硬编码也可以实现这一点吗?不幸的是,每个类的名称都是相同的。有没有办法说如果集合数在给定数组中都匹配,那么就把它们加起来?在这种情况下,我不能使用start with或end with…也不想硬编码1000种可能性。提前感谢您的任何想法或想法

我正在尝试做一些像

  function update_total()
  {
    var total = 0;
    $('.budget').each(function(index, element) {
     "#id_newbudgetlineitem_set-0-line_item_october" + 
     "#id_newbudgetlineitem_set-0-line_item_november" +
     "#id_newbudgetlineitem_set-0-line_item_december"
        var val = parseFloat($(element).val());
        if( !isNaN( val )){
             total += val;
          }
        });
        $("#id_total").val(total);
  }
这里有一个有效的解决方案

  function update_total_total_total()
  {
    var ret = +$("input[name$='set-0-line_item_january']").val() + +$("input[name$='set-0-line_item_february']").val() + +$("input[name$='set-0-line_item_march']").val() + +$("input[name$='set-0-line_item_april']").val() + +$("input[name$='set-0-line_item_may']").val() + +$("input[name$='set-0-line_item_june']").val() + +$("input[name$='set-0-line_item_july']").val() + +$("input[name$='set-0-line_item_august']").val() + +$("input[name$='set-0-line_item_september']").val() + +$("input[name$='set-0-line_item_october']").val() + +$("input[name$='set-0-line_item_november']").val() + +$("input[name$='set-0-line_item_december']").val();
    $("input[name$='set-0-line_item_total']").val(ret);
  }
但我可以有多达1000个不同的设定值。是否有其他方法可以做到这一点,而无需再硬编码999次

这是一个非常接近…但总还是说0。它正在将所有总数更新为0…因此这是进度,但没有得到实际总数。得益于Swati,我们取得了进步

  function update_total_total_total() {
    //get length of input line_total for each sets..
    for (var i = 0; i < $("[name$=line_item_total]").length; i++) {
      var total = 0;
      //get all inputs but not line_item _total
      $(`input[name*=id_newbudgetlineitem_set-${i}-line_item]:not([name$=line_item_total]):not([name$=line_item_cost_center]):not([name$=line_item_description])`).each(function(index, element) {
         var val = parseFloat($(element).val());
        if( !isNaN( val )){
             total += val;
          }
      })
      $(`input[id$=set-${i}-line_item_total]`).val(total); //set value..of input
    }
  }
function update\u total\u total\u total(){
//获取每组的输入行长度总和。。
对于(变量i=0;i<$(“[name$=line\u item\u total]”)。长度;i++){
var合计=0;
//获取所有输入,但不获取行项目总数
$(`input[name*=id\U newbudgetlineitem\U set-${i}-line\U item]:非([name$=line\U item\U total]):非([name$=line\U item\U cost\U center]):非([name$=line\U item\U description])。每个(函数(索引,元素){
var val=parseFloat($(element.val());
如果(!isNaN(val)){
总+=val;
}
})
$(`input[id$=set-${i}-line_item_total]`).val(total);//输入的set value
}
}

您可以获得名称以
行\u项\u总计
结尾的总输入长度,因此该值将是循环的
计数器

然后,在for循环内部可以使用
$(`input[name*=id\u newbudgetlineitem\u set-${i}-line\u item]:not([name$=line\u item\u total])`
这将从除
line\u total\u item
之外的所有输入中获取值,然后在每次迭代中添加值

最后,使用
$(`input[name$=set-${i}-line\u item\u total]`)
行\u总计\u项目中设置总计
文本框

演示代码

function update\u total\u total\u total(){
//获取每组的输入行长度总和。。
对于(变量i=0;i<$(“[name$=line\u item\u total]”)。长度;i++){
var合计=0;
//获取所有输入,但不获取行项目总数
$(`input[name*=id\U newbudgetlineitem\U set-${i}-line\U item]:非([name$=line\U item\U total]):非([name$=line\U item\U cost\U center]):非([name$=line\U item\U description])。每个(函数(i,元素){
var val=parseFloat($(element.val());
如果(!isNaN(val)){
总+=val;
}
})
$(`input[name$=set-${i}-line_item_total]`).val(total);//输入的set value
}
}
更新_total_total_total()

设置0:

总计:
第1组
总计:
第2组
总计:
这是最后的工作代码。正如斯瓦蒂所说,这是一个不正确的名称引用

  function update_total_total_total() {
    for (var i = 0; i < $("[name$=line_item_total]").length; i++) {
      var total = 0;
      $(`input[name*=newbudgetlineitem_set-${i}-line_item]:not([name$=line_item_total]):not([name$=line_item_cost_center]):not([name$=line_item_description])`).each(function(i, element) {
        var val = parseFloat($(element).val());
        if( !isNaN( val )){
             total += val;
          }
      })
      $(`input[name$=set-${i}-line_item_total]`).val(total);
    }
  }
function update\u total\u total\u total(){
对于(变量i=0;i<$(“[name$=line\u item\u total]”)。长度;i++){
var合计=0;
$(`input[name*=newbudgetlineitem\u set-${i}-line\u item]:不([name$=line\u item\u total]):不([name$=line\u item\u cost\u center]):不([name$=line\u item\u description])。每个(函数(i,元素){
var val=parseFloat($(element.val());
如果(!isNaN(val)){
总+=val;
}
})
$(`input[name$=set-${i}-line_item_total]`).val(total);
}
}

您可以使用循环:
来(让我=0;我非常感谢你的回答。我是一个新手…对Jquery和Javascript来说…你能告诉我如何将其合并到我的Jquery或Javascript中吗?我不知道你如何处理这些模式。我只知道如何生成它们。你可以提供一个代码示例。你可以为前两个示例演示硬编码的示例。)ilities。我非常粗略地更新了这个示例,我正在尝试做的是…我确实知道如何格式化,如果它以…开始,以…结束,但在这种情况下,我不知道如何获得这些ID,它们都具有相同的设置编号。非常感谢您的回复。这让我更接近了。总数现在正在更新,它显示为0。。。我似乎无法让它识别我在字段中的输入。我看到您的示例是type=“text”我的类型是数字。这会有什么不同吗?不,这不会引起任何问题。但是,检查我用于输入的名称是否相同,即:模式?我已更新了我的示例…更接近,但总数仍然为0。Do
console.log($(`input[name*=id\u newbudgetlineitem\u set-${i}-line\u item]:不([name$=line\u item\u total])。长度)
查看它给您带来了什么。另外,执行
控制台.log(val)
内部循环查看它是否有任何值。我添加了额外的输入。您正在使用它作为选择器。它工作正常。我认为您端的
name
有问题。请检查它们是否相同。