Just nu i M3-nätverket
Gå till innehåll

Script funkar inte i IE9


mhnr9

Rekommendera Poster

Hej

Har lite sidor där jag använder ajax och asp/sql för att fylla dropdown-lister.

Så när man väljer ett alternativ i första ddm filtreras den andra efter vad man valt i den första osv.

Detta har alltid fungerat klockrent i alla webbläsare, inklusive ie8 och äldre ie.

Men i nya IE9 så lämnas den "andra" ddm tom när man valt alternativ i första.

 

Någon som har hört något om varför det är så eller har någon ide på hur man skall lösa det?

Kan det vara så att de löst ett problem de haft innan, för jag tar hänsyn till om det varit ie eller inte när jag fyller på den andra ddm.

Bifogar de aktiva delarna av koden.

 

I asp sidan:

 

<select class="dropdown" name="modell" id="modell" onchange="fShowStorlek('storlek',this.value);">
<%Do While Not objRs.EOF%>
<option value="<%=objRs("modid")%>" <%=sSelected%>><%=objRs("modnamn")%></option>
<%objRs.MoveNext
Loop%>
</select>
<select class="dropdown" name="storlek" id="storlek">
<option value="">---Välj modell först---</option>
</select>

 

Script:

function fShowStorlek(target, storlekid){
makeHttpRequest(target, 'ddm2.asp?storlekid='+storlekid+'&target='+target, 'fReturnValue', false);
}
function makeHttpRequest(target, url, callback_function, return_xml){
var timeoutId;
var http_request = false;
if (window.XMLHttpRequest) { // Mozilla, Safari,...
	http_request = new XMLHttpRequest();
	if (http_request.overrideMimeType) {
		http_request.overrideMimeType('text/xml');
	}
} 
else if (window.ActiveXObject) { // IE
		try {
			http_request = new ActiveXObject("Msxml2.XMLHTTP");
		} catch (e) {
		try {
			http_request = new ActiveXObject("Microsoft.XMLHTTP");
		} catch (e) {}
	}
}
if (!http_request) {
	alert('Unfortunately you browser doesn\'t support this feature.');
	return false;
}
http_request.onreadystatechange = function(){
	if (http_request.readyState == 4) {
	document.getElementById('wait').style.visibility = "hidden";
		if (http_request.status == 200) {
			if (return_xml) {
				eval(callback_function + '(target,http_request.responseXML)');
			} else {
				eval(callback_function + '(target,http_request.responseText)');
			}
		} else {
			alert('There was a problem with the request.(Code: ' + http_request.status + ')');
		}
	} else {
     document.getElementById('wait').style.visibility = "visible";
 		}
}
http_request.open('GET', url, true);
http_request.send(null);
}

function fReturnValue(target,myvalue){
var changedobject = document.getElementById(target);
changedobject.innerHTML = myvalue;
if(document.all) { // Or any IE testing
	 changedobject.outerHTML = changedobject.outerHTML;
}
}

 

i ddm2.asp

 

.......
objRs.Open "exec getStorlek @storlek = " & request.querystring("storlekid") & " ", objConnBIL

If Not objRs.EOF Then

If InStr(Request.ServerVariables("HTTP_USER_AGENT"),"MSIE") <> 0 Then
Response.Write "<option value="""">Tom sträng</option>" & vbCrLf
Response.Write "<option value="""">---Välj storlek---</option>" & vbCrLf
Else 
Response.Write "<option value="""">---Välj storlek---</option>" & vbCrLf
End If

do while not objRs.EOF
Response.Write "<option value=""" & objRs("storlekid") & """>" & objRs("storleknamn") & "</option>" & vbCrLf
objRs.MoveNext
Loop
End if

Länk till kommentar
Dela på andra webbplatser

Var tar det stopp då? innan ajaxrequesten eller efter att datan tagits emot?

 

Kör lite alerts här och var för att felsöka vart det går fel.

Länk till kommentar
Dela på andra webbplatser

Hej

Tack för svaret, har testat stoppa in alerts, och det verkar som den kör igenom scriptet rätt och hämtar rätt saker.

(Kör jag alert(myvalue) i fReturnValue så skrivs rätt värden ut beroende på vilket alternativ jag väljer i första.)

Men den verkar inte kunna skriva ut värdena i objektet på sidan.

Kan det vara denna raden som strular?

changedobject.outerHTML = changedobject.outerHTML;

Länk till kommentar
Dela på andra webbplatser

Japp, den är skum.

Kör jag alert på changedobject.outerHTML skriver den ut <select></select> delen av objektet.

changedobject.innerHTML = myvalue; är <option></option> delen.

 

Tar jag bort "if(document.all)" delen funkar funktionen inte i någon version av IE.

Däremot i alla andra webbläsare.

 

Några ideer?

Länk till kommentar
Dela på andra webbplatser

 if(document.all) { // Or any IE testing

Testing står det faktiskt vilket borde tyda på att den inte gör något speciellt.

 

Vad händer om då gör så här och kör i IE ?:

 if(document.all) {alert("hej!") }

 

Om det dyker upp en alert i IE så borde man skriva något som gör att den lägger till datan till listan.

Länk till kommentar
Dela på andra webbplatser

Kör jag koden nedan...

function fReturnValue(target,myvalue){
var changedobject = document.getElementById(target);
changedobject.innerHTML = myvalue;
if(document.all) {alert("hej!") }{ // Or any IE testing
	 changedobject.outerHTML = changedobject.outerHTML;
	 alert(changedobject.outerHTML);
	 alert(myvalue);
}
}

...skriver den ut:

1. Hej

2. <select name="storlek" osv></select>

3. <option>värde1</option>

<option>värde2</option>

 

Om det dyker upp en alert i IE så borde man skriva något som gör att den lägger till datan till listan.

 

Så den skriver ut rätt värde, och lägger till det i listan.

 

Problemet verkar vara att html:en inte ändras i IE9, funkar som sagt i föregående versioner. Skrivs bara ut en tom <select> box.

(Vilket borde innebära att den bara skriver ut changedobject.outerHTML = changedobject.outerHTML;i html sidan och inte changedobject.innerHTML = myvalue;)

 

Andra webbläsare registrerar detta:

var changedobject = document.getElementById(target);
changedobject.innerHTML = myvalue;

Och det fungerar perfekt.

Länk till kommentar
Dela på andra webbplatser

Buggrapport:

http://support.microsoft.com/kb/276228

 

Man kan antagligen inte använda innerHTML på Select-element i IE.

 

Du behöver nog göra följande för IE

1. Ha en omslutande div med unikt ID

2. Sätta innerHTML på divven till myvalue och omsluta med changedobject.outerHTML på något sätt.

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...