jQuery güncelleme IE7 / 8 ile çalışmıyor

2 Cevap php

the help of members from this post, jQuery prototip dönüştürülmüş ile.

function jsUpdateCart(){
  var parameter_string = '';
  allNodes = document.getElementsByClassName("process");
  for(i = 0; i < allNodes.length; i++) {
    var tempid = allNodes[i].id;
    var temp = new Array;
    temp = tempid.split("_");
    var real_id = temp[2];
    var real_value = allNodes[i].value;
    parameter_string += real_id +':'+real_value+',';
  }

  var params = 'ids='+parameter_string;

   $.ajax({
   type: "POST",
   url: "http://127.0.0.1/codeigniter_shopping/index.php/welcome/ajax_cart",
   data: params,
   success: function( r ) {
    $('#ajax_msg').html( r );
    location.reload( true );
  }
 });

}



function jsRemoveProduct(id){
  var params = 'id='+id;
  $.ajax({
   type: "POST",
   url: "http://127.0.0.1/codeigniter_shopping/index.php/welcome/ajax_cart_remove",
   data: params,
   success: function( r ) {
    $('#ajax_msg').html( r );
    location.reload( true );
  }
 });
}

ajax_cart_remove Firefox ve IE çalışır, ancak güncelleme Firefox ile çalışır, ancak IE 7/8 ile değil.

Herkes bana bazı öneriler verebilir misiniz.

Sen orijinal prototype code here görebilirsiniz.

kontrolörleri ajax_cart ve ajax_cart_remove şunlardır.

function ajax_cart(){
    $this->MOrders->updateCartAjax($this->input->post('ids'));  
  }

  function ajax_cart_remove(){
    $this->MOrders->removeLineItem($this->input->post('id'));
  }

Ve Moders için modelleri takip ediyoruz.

function removeLineItem($id){
    $id = id_clean($id);
    $totalprice = 0;
    $cart = $_SESSION['cart'];
    if (isset($cart[$id])){
    	unset($cart[$id]);
    	foreach ($cart as $id => $product){
    		$totalprice += $product['price'] * $product['count'];
    	}		
    	$_SESSION['totalprice'] = $this->format_currency($totalprice);
    	$_SESSION['cart'] = $cart;

    	echo "Product removed.";
    }else{
    	echo "Product not in cart!";
    }
}

function updateCartAjax($idlist){
    $cart = $_SESSION['cart'];
    $records = explode(',',$idlist);
    $updated = 0;
    $totalprice = $_SESSION['totalprice'];

    if (count($records)){
    	foreach ($records as $record){
    		if (strlen($record)){
    			$fields = explode(":",$record);
    			$id = id_clean($fields[0]);
    			$ct = $fields[1];

    			if ($ct > 0 && $ct != $cart[$id]['count']){
    				$cart[$id]['count'] = $ct;
    				$updated++;
    			}elseif ($ct == 0){
    				unset($cart[$id]);
    				$updated++;
    			}
    		}	
    	}

    	if ($updated){
    		$totalprice=0;
    		foreach ($cart as $id => $product){
    			$totalprice += $product['price'] * $product['count'];
    		}		

    		$_SESSION['totalprice'] = $this->format_currency($totalprice);
    		$_SESSION['cart'] = $cart;

    		switch ($updated){
    			case 0:
    			$string = "No records";
    			break;

    			case 1:
    			$string = "$updated record";
    			break;

    			default:
    			$string = "$updated records";
    			break;
    		}
    		echo "$string updated";

    	}else{
    		echo "No changes detected";

    	}
    }else{
    	echo "Nothing to update";

    }
}

Aşağıdaki form html çıktı

<form action="http://127.0.0.1/codeigniter_shopping_copy2/index.php/welcome/checkout" method="post"><table border='1' cellspacing='0' cellpadding='5'>
<tr valign='top'>
<td><input type="text" name="li_id[10]" value="1" id="li_id_10" class="process" size="5"  /></td>
<td id='li_name_10'>Dress 1</td>
<td id='li_price_10'>33.95</td>
<td id='li_total_10'>33.95</td>
<td><input type='button' name='delete' value='delete' onclick='jsRemoveProduct(10)'></td>
</tr>
<tr valign='top'>

<td><input type="text" name="li_id[6]" value="2" id="li_id_6" class="process" size="5"  /></td>
<td id='li_name_6'>Shoes 1</td>
<td id='li_price_6'>23.95</td>
<td id='li_total_6'>47.90</td>
<td><input type='button' name='delete' value='delete' onclick='jsRemoveProduct(6)'></td>
</tr>
<tr valign='top'>
<td colspan='3'>&nbsp;</td>
<td colspan='2'>81.85 
<input type="hidden" name="name" value="total" />
<input type="hidden" name="id" value="total" />
<input type="hidden" name="value" value="81.85" />
</td>
</tr>

<tr valign='top'>
<td colspan='3'>&nbsp;</td>
<td colspan='2'><input type='button' name='update' value='update' onclick='jsUpdateCart()'/></td>
</tr>
<tr valign='top'>
<td colspan='3'>&nbsp;</td>
<td colspan='2'><input type="submit" name="submit" value="checkout"  /></td>
</tr>
</table>
</form>

2 Cevap

Ben IE document.getElementByClassName destekler sanmıyorum ("")

Değiştirmeyi deneyin

allNodes = document.getElementsByClassName("process");

ile

allNodes = $(".process");

wich JQuery yoludur.

IE8 sadece Web Developer Toolkit getirmek ve bu çizgisinde bir kırılma noktası koydu:

$('#ajax_msg').html( r );

Ben de .ajax burada aramak bir kırılma noktası koymak istiyorum:

var params = 'ids='+parameter_string;

   $.ajax({

sonra ne olduğunu görün.

Eğer düzgün bunu aldığınızdan emin olabilirsiniz Bu şekilde, başka IE burada alırsanız sonra geri hizmet için dışarı gider ve eğer ne ilk url olduğunu, görmek gerekir, buraya gelmeden önce bir sorununuz varsa, ya da olabilir size söyleyecektir. Bu bir hata nedeniyle bir noktada dışarı atlar eğer success kod sayesinde tek adım ve görmek.

Bu kod sorun, o size öğrendiklerinizi ile güncelleyebilirsiniz, ama IE7 ve 8 bu işlevi kullanmış bir gerçeği biliyorum bir zamanlar çok iyi çalışması gerekir.