2013-02-03 75 views
0

爲什麼不能在ie中使用onChange? 這是否有解決方案?在Internet Explorer中更改

HTML:

<select id="auto_doors" style="display:none;" name="auto_doors" onchange="updateField(this.value, 'auto_fuel', 5, 6, this.parentNode.id), resetBelow(4,'auto'), show('auto_fuel')"> 
</select> 

功能:

if (jQuery.browser.msie) { setTimeout(DoSomething, 0); } else { DoSomething(); } 
     function updateField(str, id, prevvalue, value, vehicletype) 
     { 
     if (str=="") 
      { 
      document.getElementById(id).innerHTML=""; 
      return; 
      } 
     if (window.XMLHttpRequest) 
      {// code for IE7+, Firefox, Chrome, Opera, Safari 
      xmlhttp=new XMLHttpRequest(); 
      } 
     else 
      {// code for IE6, IE5 
      xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
      } 
     xmlhttp.onreadystatechange=function() 
      { 
      if (xmlhttp.readyState==4 && xmlhttp.status==200) 
      { 
      document.getElementById(id).innerHTML=xmlhttp.responseText; 
      } 
      } 
     xmlhttp.open("GET","inc/form_rest.php?q="+str+"&prevvalue="+prevvalue+"&value="+value+"&vehicletype="+vehicletype,true); 
     xmlhttp.send(); 
     } 
+4

如果你使用的是jQuery,那麼你爲什麼要做'window.XMLHttpRequest'?哦,你可以在IE中使用onchange。你有什麼問題/錯誤? – j08691

+1

是的,如果你無論如何揹負着一個圖書館的重量,你最好儘可能地使用它。 – techfoobar

+0

jQuery ajax doc http://api.jquery.com/jQuery.ajax/ –

回答

0

三點意見,可以幫助:

  1. 沒有必要支持IE6及以下了。 new XMLHttpRequest()就足夠了。
  2. 您應該在之後設置onreadystatechange呼叫.open()。在某些瀏覽器(probaby只是IE)中調用.open()會算作「新請求」並清除readystatechange處理程序。
  3. 舊版本的IE(IE7?)不喜歡this.value<select>上。相反,你應該使用this.options[this.selectedIndex].value
1

嘗試更改事件綁定到auto_doors元素像這樣代替:

$("#auto_doors").change(function(){ 
    updateField(this.value, 'auto_fuel', 5, 6, this.parentNode.id), resetBelow(4,'auto'), show('auto_fuel'); 
}); 
+0

嗯,這是非常令人沮喪的,我認爲我現在必須改變很多代碼.. –

+0

這仍然不會發送值到下一個選擇框,它只是使它出現,但它仍然在其他瀏覽器如chrome和ff –

1

您可以使用jQuery來解決這個問題的代碼將是這樣的:

$('#auto_doors').change(function() { 
    alert('Handler for .change() called.'); 
});