Javascript jquery我们可以循环一个函数吗?

Javascript jquery我们可以循环一个函数吗?,javascript,jquery,html,Javascript,Jquery,Html,为什么这种类型的循环不能工作?如果这个函数没有循环,它就可以完美地工作。我需要这段代码,因为我有动态附加div $(document).ready(function(){ for (var count = 1; count < 10; count++) { $('#keranjang').on('keyup', '#tinggikm'+count+', #lebarkm'+count, function(){ <!-- Ambi

为什么这种类型的循环不能工作?如果这个函数没有循环,它就可以完美地工作。我需要这段代码,因为我有动态附加div

$(document).ready(function(){
    for (var count = 1; count < 10; count++) {
            $('#keranjang').on('keyup', '#tinggikm'+count+', #lebarkm'+count, function(){
            <!-- Ambil nilai !-->
            var tinggi=parseInt($('#tinggikm'+count).val());
            var lebar=parseInt($('#lebarkm'+count).val());
            var harga=(tinggi * lebar) * 1000;

            $('#hargakm'+count).val(format1(harga, "Rp."));
            });
    }
});
$(文档).ready(函数(){
对于(变量计数=1;计数<10;计数++){
$(“#keranjang”)。在('keyup'、'#tinggikm'+计数+'、#lebarkm'+计数,函数()上{
var tinggi=parseInt($('#tinggikm'+count).val());
var lebar=parseInt($('#lebarkm'+count).val());
var harga=(tinggi*lebar)*1000;
$(#hargakm'+count).val(格式1(harga,“Rp.”);
});
}
});
这是我从附加jquery中得到的html

countkm = 1;
 countj = 1;
 countp = 1;
$("#somebutton").click(function () {
 var tipe = $( "#selecttipe option:selected" ).val();
  $("#keranjang").append(
                '<div class="col-md-4" style="border:1px solid #0d8b2a; border-radius:10px; width:31%; margin:10px">'+
                    '<p style="font-size:16px; letter-spacing:1px; font-weight:700; text-transform:uppercase; text-decoration:underline; margin-bottom:15px">'+
                    (tipe == "km" ? 'Kaca Mati ' : tipe == "j" ? 'Jendela ' : 'Pintu ')+(tipe == "km" ? countkm : tipe == "j" ? countj : countp)+
                    '</p>'+
                    '<div class="form-group">'+
                        '<label class="control-label">TINGGI (cm)</label>'+
                        '<input type="text" class="form-control" value="'+
                        (tipe == "Pintu" ? '200' : '100')+
                        '" id="tinggi'+tipe+(tipe == "km" ? countkm : tipe == "j" ? countj : countp)+'">'+
                        '<label class="control-label">LEBAR (cm)</label>'+
                        '<input type="text" class="form-control" value="'+
                        '100'+
                        '" id="lebar'+tipe+(tipe == "km" ? countkm : tipe == "j" ? countj : countp)+'">'+
                        '<label class="control-label">HARGA</label>'+
                        '<input type="text" class="form-control" disabled value="'+
                        '0'+
                        '" id="harga'+tipe+(tipe == "km" ? countkm : tipe == "j" ? countj : countp)+'">'+
                    '</div>'+
                '</div>'
                );
                if (tipe == "km"){countkm++;}else if(tipe =="j"){countj++;}else{countp++;};

});
countkm=1;
countj=1;
countp=1;
$(“#somebutton”)。单击(函数(){
var tipe=$(“#selecttipe选项:selected”).val();
$(“#科兰江”)。追加(
''+
“

”+ (tipe==“km”?“Kaca Mati”:tipe==“j”?“Jendela”:“Pintu”)+(tipe==“km”?countkm:tipe==“j”?countj:countp)+ “

”+ ''+ "汀吉(cm)"+ ''+ “LEBAR(厘米)”字样+ ''+ “哈尔加”+ ''+ ''+ '' ); if(tipe==“km”){countkm++;}else if(tipe==“j”){countj++;}else{countp++;}; });
这是我创建div的按钮html

<select style="float:left; width:50%" class="form-control select2me" id="selecttipe" required>
                            <option value="km">Kaca Mati</option>
                            <option value="j">Jendela</option>
                            <option value="p">Pintu</option>
                        </select>
                        <button id="somebutton" style="float:left; margin-left:10px" type="submit" class="btn"> Tambah</button>

卡卡马蒂
詹德拉
平图
坦巴

使用id从选择器开始,而不是像这样循环怎么样:-

$(document).ready(function() {
  $('#keranjang').on('keyup', '[id^=tinggikm], [id^=lebarkm]', function() {
    <!-- Ambil nilai !-->
    var tinggi = parseInt($('#tinggikm' + count).val());
    var lebar = parseInt($('#lebarkm' + count).val());
    var harga = (tinggi * lebar) * 1000;
    $('#hargakm' + count).val(format1(harga, "Rp."));
  });
});
$(文档).ready(函数(){
$('#keranjang')。在('keyup','id^=tinggikm','id^=lebarkm',函数()上{
var tinggi=parseInt($('#tinggikm'+count).val());
var lebar=parseInt($('#lebarkm'+count).val());
var harga=(tinggi*lebar)*1000;
$(#hargakm'+count).val(格式1(harga,“Rp.”);
});
});

这不是一种简单地附加事件的循环方法。您可以使用数据属性以更好、更简单的方式完成这项工作。我猜您需要在动态生成的输入字段上附加一个
keyup
事件

这里是你能做的

  • 在视图中的HTML创建时间为您的
    div
    中的每个元素分配一个唯一的
    id
    ,例如
    id=“tinggikm2”{i}“
    ,它将呈现为
    id=“tinggikm1”
    id=“tinggikm2”
  • 然后将公共类即“my_keyup_input”添加到要调用
    keyup
    方法的输入字段中。重要!为唯一计数添加一个
    data
    属性,如
    data count=“#{i}”
    ,具体取决于您的语言
  • 最后,在jQuery中,您可以使用类选择器侦听事件, 像这样的东西

     $(document).ready(function(){
    
    $('.my_keyup_input').on('keyup',    function(){
    
      // Lets get the count to uniquely identify our related div elements
      var count = $(this).data('count');
    
      var tinggi=parseInt($('#tinggikm'+count).val());
      var lebar=parseInt($('#lebarkm'+count).val());
      var harga=(tinggi * lebar) * 1000;
    
      $('#hargakm'+count).val(format1(harga, "Rp."));
    });
    });
    

  • 根据创建的html,一个选项是捕获所有键控,并使用包含
    .form组
    查找相应的输入和值。这样就不需要引用特定的已创建id。通过更改html的创建方式,有更有效的方法,但以下方法应适用于当前功能:

    $('#keranjang').on('keyup', function(e){ //bind on keyup for entire container (no loop)
        var inp = $(e.target), //the input for which the keyup was captured
            grp=inp.closest('.form-group') //the group the input is in
          inputs = grp.find('.form-control'), //all inputs
            lbl = inputs.filter(':disabled'); //the disabled input is the total (if possible: using specific classes for the inputs and labels would be better)
      lbl.val(inputs.not(lbl).toArray().reduce(function(t,i){return t * parseInt(i.value);}, 1000)); //use reduce on the other inputs, to multiply them with each other (with a base of 1000)  
    });
    

    你想实现什么?你能分享HTML吗?我认为您根本不需要循环,可能是我们提供了更好的解决方案ID必须是唯一的。我建议您在所有元素上使用唯一的类,并执行
    $('.uniqueClass')。在(…)
    count
    在keyup回调函数之外声明。因此,回调中的
    $('#hargakm'+count)
    等构造将不会引用为其创建函数的“count”的值。在某些情况下,
    $(此)
    可以解决该问题,但由于存在多个元素,其他一些解决方法可能会更好。如Satpal所述,如果您共享您的HTML,社区可能会找到一个替代解决方案。不需要为动态添加的元素循环事件,只需执行以下操作:$(“父元素”)。关于('event','targeted_element',function(){…})很抱歉,我现在有另一个问题,所以现在我有多个‘’#hargakm'+count`box。。在keyup事件中,我希望所有活动框(动态添加)将所有
    #hargakm
    相加,并将其放置在我创建的输入字段中。。怎么做*请注意,我有3种类型的输入字段
    #hargakm#hargap#hargaj
    ,非常感谢。如果您在同一个
    div
    中有多个框,并且想要计算这些值的总和,那么您可以根据
    div
    为它们分配一个唯一的类,例如
    div\u input\u box\u 2
    ,然后可以调用
    $('div\u input\u box'+2).each(函数(索引,元素){//这里您可以为每个元素做自己的事情。可以获取值并将其添加到在该函数之外声明的sum变量。})