2016-12-06 4 views
0

Я хочу создать корзину покупок, где клиент выбирает элемент из автоматического поиска автозаполнения, который автоматически добавляется в корзину. И на основе количества цены количества может быть обновлено. Я добавил в корзину успешно, но я не мог динамически обновлять цену. Может кто-нибудь мне точку, что это ошибка с существующим кодом:Как обновить цену, основанную на количестве количества, используя jquery

$('#searchName').autocomplete({ 
    source: '{!! asset('nameAutocomplete') !!}', 
    select:function(suggestion,ui){ 
     event.preventDefault(); 
     var $tbody = $('#example tbody'); 
     $tbody.append('<tr><td class="id">' + ui.item.id + 
      '</td><td class="name">' + ui.item.value + 
      '</td><td class="price" id="price">' + ui.item.price + 
      '</td><td><input type="text" id="quantity" value="1"/></td><td><input type="text" id="total" readonly value="'+ui.item.price+'" class="readonly"/></td></tr>'); 

     $('#quantity').on('keyup',function(){ 
      var tot = ui.item.price * this.value; 
      $('#total').val(tot); 
     }); 
    }     
}); 

Вот таблица часть кода:

<table class="table table-striped table-bordered" id="example"> 
    <thead> 
     <tr>       
      <td>ID</td> 
      <td>Name</td> 
      <td>Price</td> 
      <td>Quantity</td> 
      <td>Total</td>      
     </tr> 
    </thead> 
    <tbody> 
    </tbody> 
</table> 

Ошибка я получаю:

enter image description here

+2

каждая строка имеет элемент с тем же идентификатором «количество» – abc123

+2

'id's должны быть уникальными, но вы будете имеют 'n' число' id = "количество" 'и' id = "total" '. Итак, как, по вашему мнению, javascript будет знать, какие '$ ('# quantity')' или '$ ('# total')' вы выбираете? – Sean

ответ

2

Проверка с помощью следующего кода, я добавил немного в @Mayank код,

 var $tbody = $('#example tbody'); 
     $tbody.append('<tr><td class="id">' + ui.item.id + 
     '</td><td class="name">' + ui.item.value + 
     '</td><td class="price">' + ui.item.price + 
     '</td><td><input type="text" class="quantity" value="1"/></td><td><input type="text" class="total" readonly value="'+ui.item.price+'" class="readonly"/></td></tr>'); 


     $('.quantity').on('keyup',function(){ 
      //Corrected part 
      var tot = $(this).parent().prev().html() * this.value; 
      //var tot = ui.item.price * this.value; 
      //Assume that you are getting correct value to tot variable 
      $(this).parent().next().find('.total').val(tot);  
     }); 
+0

Проблема с вашим кодом полностью обновляется в зависимости от количества, но не в точном имени строки. означает общее обновление, основанное на последней цене товара, в то время как я меняю количество – Hola

+0

Я обновляю код. Пожалуйста, проверьте. Вы правы. Потому что он получает ту же цену. Я немного изменил код. – SilentCoder

0

Внесите следующие изменения в код:

var $tbody = $('#example tbody'); 
$tbody.append('<tr><td class="id">' + ui.item.id + 
    '</td><td class="name">' + ui.item.value + 
    '</td><td class="price">' + ui.item.price + 
    '</td><td><input type="text" class="quantity" value="1"/></td><td><input type="text" class="total" readonly value="'+ui.item.price+'" class="readonly"/></td></tr>'); 

    // Use class in place of id, as you cannot work with id for multiple occurance of same html 

$('.quantity').on('keyup',function(){ 
    var tot = ui.item.price * this.value; 
    $(this).find('.total').val(tot); // Use DOM traverse to get the next <input type="text" /> and put new total value to it 
}); 
+0

Я получил общее количество в первый раз, но когда я обновляю количество .., он не смог обновить общую стоимость с помощью вашего кода. – Hola

+0

@ Хола я добавил ответ. Надеюсь, это вам поможет. – SilentCoder

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