2017-02-01 3 views
0

Почему не работает этот тип петли? если эта функция не зациклирована, она работает отлично. Мне нужен этот код, потому что у меня есть динамический прилагаемого DIVjQuery мы можем зацикливать функцию?

$(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.")); 
      }); 
    } 
}); 

это мой HTML с добавленного JQuery

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++;}; 

}); 

и это моя кнопкой 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> 
+1

Что вы пытаетесь достичь? – Mairaj

+1

Можете ли вы поделиться HTML? Я думаю, что вам вообще не нужен цикл, возможно, мы предоставим лучшее решение. – Satpal

+0

Идентификатор должен быть уникальным. Я предлагаю вам использовать уникальный класс для всех элементов и использовать '$ ('. UniqueClass'). On (...)' – Rajesh

ответ

0

Это нехороший подход к циклу для простого подключения события. Вы можете сделать это лучше и проще, используя атрибуты данных. Я предполагаю, что вам нужно прикрепить событие keyup к динамически генерируемым полям ввода.

Вот что вы можете сделать;

  1. Назначить уникальный id каждому элементу в вас div по времени создания HTML на ваш взгляд, например id="tinggikm#{i}", который будет оказывать как id="tinggikm1", id="tinggikm2".
  2. Затем добавьте общий класс i.e "my_keyup_input" в поле ввода, на которое вы хотите вызвать метод keyup. ВАЖНЫЙ! добавьте атрибут data для уникального счета data-count="#{i}" в зависимости от вашего языка.
  3. Затем, наконец, в 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.")); 
    }); 
    }); 
    
+0

большое спасибо, он хорошо работает :) – gusmavin

+0

жаль, что у меня есть еще одна проблема сейчас, поэтому теперь у меня есть несколько ящиков # hargakm + count' .. в событии keyup, я хочу, чтобы все активные поля (которые добавляется динамически), чтобы суммировать все «# hargakm» и поместить его в поле ввода, которое я создал .. как это сделать? * Обратите внимание, что у меня есть 3 типа поля ввода '#hargakm #hargap # hargaj' спасибо большое .. – gusmavin

+0

Если у вас есть несколько ящиков в пределах одного и того же' div' и вы хотите вычислить сумму этих значений, вы можете назначить им уникальный класс, основанный на 'div', например' div_input_box_2', а затем может вызывать '$ ('. div_input_box _' + 2) .each (function (index, element) { // здесь вы можете делать свои вещи для каждого элемента. может быть может получить значение и добавить его в переменную суммы, объявленную вне этой функции. }) ' –

0

насчет использование 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.")); 
    }); 
}); 
0

основы созданного HTML, опция является захват всех keyups и использовать содержащий .form-group, чтобы найти соответствующие входы и значение. Таким образом, не нужно ссылаться на конкретные созданные идентификаторы. Есть более эффективные способы, путем изменения пути создания 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) 
}); 

Fiddle

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