Ajax Request ne fonctionne qu’une fois

Je travaille sur la classe cart de codeigniter. Je souhaite mettre à jour le panier lorsque l’utilisateur change la quantité d’élément.

J’ai jquery fichier comme ça

$(function() { $('#bookings_form_customer select').on('change', function(ev) { var rowid = $(this).attr('class'); var qty = $(this).val(); var postData_updatecart = { rowid : rowid, qty : qty }; //posting data to update cart $.ajax({ url : base_url + 'bookings/update_booking_cart', cache : false, type : 'post', data : postData_updatecart, beforeSend : function() { $('#cart_content').html('Updating...'); }, success : function(html) { $('#cart_content').html(html); } }); }); }); 

Je demande au contrôleur ci-dessous de mettre à jour le panier.

 class Bookings extends NQF_Controller { public function update_booking_cart() { $rowid = $this -> input -> post('rowid'); $qty = $this -> input -> post('qty'); $data = array('rowid' => $rowid, 'qty' => $qty); $this -> cart -> update($data); $this -> load -> view('shop/cart'); } } 

Mon fichier de magasin / panier ressemble à ceci

 
'bookings_form_customer', 'id' => 'bookings_form_customer')); ?> cart->contents() as $items): ?> session -> userdata('booking_pickup')=='courier') { ?> session -> userdata('booking_return')=='courier') { ?>
Item Description QTY Item Price Sub-Total
cart->has_options($items['rowid']) == TRUE): ?>

cart->product_options($items['rowid']) as $option_name => $option_value): ?> :

<select name="" class=""> <?php for($tt=0; $tt <option value="" > cart->format_number($items['price']); ?> $cart->format_number($items['subtotal']); ?>
Pick Up Fees HK $20
Drop Off Fees HK $20
Total $cart->format_number($this->cart->total()); ?>

Lorsque j’ai changé l’option de sélection (qui contient la quantité de produit), la demande AJAX est envoyée et cela fonctionne. Mais, cela ne fonctionne que pour la première fois, cela ne fonctionne pas à partir de la deuxième fois.

Lorsque je supprime l’appel de demande ajax et que je place une alerte à la place, cela fonctionne à tout moment. Cela signifie qu’il n’y a un problème que sur la partie ajax. Je suis coincé depuis avant-hier. S’il vous plaît aider.

essayez quelque chose comme ça

 $(function() { $(document).on( "change", "#bookings_form_customer select", function(ev) { // your code goes here }); }); 

C’est parce que vous remplacez votre élément sur lequel vous avez appliqué l’événement change jquery.

Ainsi, le nouvel élément provenant d’ajax n’a pas d’événement change, donc il ne fonctionne pas.

alors essayez ci-dessus le code qui liera l’événement change sur un élément de création dynamic

ÉDITÉ

 $(function() { $('#cart_content').on( "change", "#bookings_form_customer select", function(ev) { // your code goes here }); }); 

vous pouvez réduire votre sélection à celle entourant votre élément @Jack

changez vos codes jquery en

 $(function() { $('#bookings_form_customer').on('change', 'select', function(ev) { var rowid = $(this).attr('class'); var qty = $(this).val(); var postData_updatecart = { rowid : rowid, qty : qty }; //posting data to update cart $.ajax({ url : base_url + 'bookings/update_booking_cart', cache : false, type : 'post', data : postData_updatecart, beforeSend : function() { $('#cart_content').html('Updating...'); }, success : function(html) { $('#cart_content').html(html); } }); }); 

et cela devrait le résoudre

Bon, ce problème est dû au message postérieur, jQuery ne fonctionne pas après la publication postérieure.

Il y a deux méthodes pour appeler votre fonction sur le chargement de la page ou pour tout événement vous pouvez également utiliser ce code

  Sys.WebForms.PageRequestManager.getInstance().add_endRequest(funtionPost); 

mettez votre code dans cette fonction aussi qui ne fonctionne pas

  function funtionPost() { } 

J’espère que cela fonctionnera