jQuery appendTo (), json IE 6,7,8 çalışmıyor

1 Cevap php

Ben bunun için bir çözüm bulmaya çalışan iki gün boyunca başımı raf oldum. Ben başka bir kutu değiştirildiğinde bir kutusunu güncelleştirmek için veritabanındaki değerleri kapmak için () jQuery.ajax kullanıyorum. Php komut dosyası veritabanından değerleri kapmak ve sonra json tükürür. BT FF çalışıyor ancak tüm IE sürümlerinde seçim kutusu güncellenen almaz. Ben çıkış olmak json iyi olduğunu teyit ettik.

İşte jquery olduğunu:

    function getVendors(dest,selectSup)
{
    var vend = $('select#sup').val();
    $.ajax({
    	beforeSend: function(){
        $("select#dest").parent().addClass('loading');
    	},
    	type: "GET",
    	dataType: "json",
    	cache: false,
    	url: '/search/cruiseselect/?type=vendors&supplier=' + vend + '&dest=' + dest,
    	timeout: 2000,
    	error: function() {
    	alert("Failed to submit");
    	},
    	success: function(data) { 
    		$("select#sup option").remove();
    		var any = "<option value=\"any\">-- All Cruise Lines --</option>";
    		$(any).appendTo("select#sup");                   
    		$.each(data, function(i, j){  
    			if(j != null && j != undefined) {
    				var sel = j.value == selectSup ? " selected" : "";
    				var row = "<option value=\"" +  j.value + sel + ">" +  j.text +  "</option>";     
    				//$(row).appendTo("select#sup");                  
    				$("select#sup").append(row);
    			}
    		}); 
    	},
    	complete: function(){
        $("select#dest").parent().removeClass('loading');
    	}
    });
}
jQuery(document).ready(function(){

     //dynamic select boxes 
    $("select#dest").change(function(){
    	var selectSup = $("select#sup").children("option:selected").val();
    	getVendors($(this).val(),selectSup);
    }); 
});

Benim php bu var

header('Cache-Control: no-cache, must-revalidate');

header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');

header('Content-type: application/json');


echo json_encode($json);

Ve hiçbir ekstra virgül ya da bir şey ile doğru json çıktısı bulunuyor. Dahası olduğunu ben uyarı (j.value + j.text) kullanıyorsanız; benim. each () döngü içinde, ben IE doğru verileri almak bu yüzden çalışmıyor jquery appendTo () var gibi görünüyor.

Herkes herhangi bir fikir var mı?

1 Cevap

JQuery (çalıştığını ben belki onun. Html (... did it düşündüm)) bu işleme olmadığını, biraz şaşırdım.

Sorun, bir IE (6,7,& 8) bug that you can't set the .innerHTML of a select list dayanmaktadır.

"Vanilya" kullanarak Javascript yeni seçenekler oluşturmak ve bir select eklemek için Seçenek nesnesini kullanabilir, ya da (örneğin, select etiketleri dahil) bir kerede tüm Seç listesini ayarlayabilirsiniz.

var mySelect = $("select#sup").get(0);//get actual DOM element
var newOpt,selLen;
for(var i=0;i<10;i++){
  newOpt = new Option('Label: ' + i, i);
  //format new Option(text, value, defaultSelected, selected);
  //add new option to select object
  selLen = mySelect.options.length;
  mySelect.options[selLen] = newOpt;

  //This may also work, but I don't recall if IE6 supports the .push()
  //method on the options collection, if so, this line will replace the 2 above
  //    mySelect.options.push(newOpt);
}