06. august 2007 - 09:13Der er
12 kommentarer og 1 løsning
Problemer med IE!
Hej Eksperter.
Jeg er ved at lave et JavaScript til at tjekke formularinfo, samtidig med at brugeren skriver i felterne, men jeg er løbet i et problem med Internet Explorer.
Jeg har lavet scriptet således at submit knappen er disablet indtil alle felter i formularen er udfyldt korrekt, og det virker også fint nok i FireFox, men i Internet Explorer bliver submit knappen ikke enabled igen...
Er der nogen der kan sige mig hvorfor? Har hørt noget om at IE skal have special behandling, men er først lige begyndt at lære JavaScript, så kender ikke genvejene, hvis der skulle være nogen...
JavaScript kode: // Function to set focus on a field function setFocus(field_id) { document.getElementById(field_id).focus(); } // Function to write text instantly function write_text_instant(msg,text) { document.getElementById(msg).innerHTML = text; } // Function to disable element function disable(element_id) { document.getElementById(element_id).disabled = true; } // Function to enable element function enable(element_id) { document.getElementById(element_id).disabled = false; } // Function to disable / enable element function ena_dis(element_id, form_id, call_id) { var x = document.getElementById(form_id);
for (var i = 0; i < x.length; i++) { var field_value = document.getElementById(x.elements[i].id).value; if (x.elements[i].id == "name") { if ((field_value.length < 5) || (isNaN(field_value) == false)) { if (call_id >= 1) { write_text_instant('name_msg_instant','<font style="color:#FF0000;">Must be at least 5 letters</font>' +name); } name = false; } else { write_text_instant('name_msg_instant','<font style="color:#00FF00">OK</font>' +name); name = true; } } if (x.elements[i].id == "adress") { if ((field_value.length < 6) || (isNaN(field_value) == false)) { if (call_id >= 2) { write_text_instant('adress_msg_instant','<font style="color:#FF0000;">Must be at least 6 letters</font>' +adress); } adress = false; } else { write_text_instant('adress_msg_instant','<font style="color:#00FF00">OK</font>' +adress); adress = true; } } if (x.elements[i].id == "zipcode") { if ((field_value.length != 4) || (isNaN(field_value) == true)) { if (call_id >= 3) { write_text_instant('zipcode_msg_instant','<font style="color:#FF0000;">Must be 4 digits</font>' +zipcode); } zipcode = false; } else {; write_text_instant('zipcode_msg_instant','<font style="color:#00FF00">OK</font>' +zipcode); zipcode = true; } } } if ((name == true) && (adress == true) && (zipcode == true)) { enable(element_id); } if ((name == false) || (adress == false) || (zipode == false)) { disable(element_id); } }
Skulle nok lige sige at for at tjekke, tjekke igen, og tjekke lidt mere, så har jeg ved hver meddelelse vedrørende det felt brugeren skriver i, også skrevet værdien af den variable jeg sætter til det felt, for at få bekræftet at nedenstående IF'er burde virke: if ((name == true) && (adress == true) && (zipcode == true)) { enable(element_id); } if ((name == false) || (adress == false) || (zipode == false)) { disable(element_id); }
Når alle felterne er udfylt korrekt, er variablerne "true"... Så jeg er lidt på bar bund med hvorfor det ikke virker
Du skal nok i stedet for for (var i = 0; i < x.length; i++) { have for (var i = 0; i < x.elements.length; i++) {
Og sæt så nogle testalerts ind: alert("i = " + i); så du kan følge med i hvad der sker. Fjern dem ikke med det samme, men sæt en kommentar foran. alert("i = " + i); Så har du en chance for at følge med.
Koden virker nu i IE, og ser sådan ud: function ena_dis(element_id, form_id, call_id) { var x = document.getElementById(form_id); var name = false; var adress = false; var zipcode = false;
for (var i = 0; i < x.elements.length; i++) { var field_value = document.getElementById(x.elements[i].id).value; if (x.elements[i].id == "name") { if ((field_value.length < 5) || (isNaN(field_value) == false)) { if (call_id >= 1) { write_text_instant('name_msg_instant','<font style="color:#FF0000;">Must be at least 5 letters</font>'); } } else { write_text_instant('name_msg_instant','<font style="color:#00FF00">OK</font>'); name = true; } } if (x.elements[i].id == "adress") { if ((field_value.length < 6) || (isNaN(field_value) == false)) { if (call_id >= 2) { write_text_instant('adress_msg_instant','<font style="color:#FF0000;">Must be at least 6 letters</font>'); } } else { write_text_instant('adress_msg_instant','<font style="color:#00FF00">OK</font>'); adress = true; } } if (x.elements[i].id == "zipcode") { if ((field_value.length != 4) || (isNaN(field_value) == true)) { if (call_id >= 3) { write_text_instant('zipcode_msg_instant','<font style="color:#FF0000;">Must be 4 digits</font>'); } } else {; write_text_instant('zipcode_msg_instant','<font style="color:#00FF00">OK</font>'); zipcode = true; } } } if ((name == true) && (adress == true) && (zipcode == true)) { enable(element_id); } if ((name == false) || (adress == false) || (zipode == false)) { disable(element_id); } }
Men jeg får stadig fejlen efter at jeg har udfyldt 2 felt?!
Du skal sætte alerts ind på interessante steder, fx først i en løkke, så du kan se om den kommer derind, og hvor mange gange - bare mens du debugger. Nej tak, ingen point til mig.
I går aftes sad jeg med et script, der skulle loope gennem et array med 400 pladser - og der skulle testes undervejs ... NEJ, JEG KAN IKKE LIDE ALERTS LANGE LØKKER ...!!! Undskyld versalerne ;o)
- nå, men man får da motioneret sin TaskManager ... indtil ordet 'confirm' pludselig dukker op mellem de hårdtristede, forrøgede, mokkafarvede celler :D
I øvrigt har jeg hørt et rygte om at MS købte netop dén feature af Opera. De ville bruge den på deres Mac-versioner af Explorer ... den skulle bare virke modsat, så man kunne slå JS til ved alert-boks. Efter i otte år at have slåsset med at få en alert-boks frem uden JS slået til opgav de at få JS til at virke i MacOS/IE - og opgav efterfølgende helt IE til Mac ... *gnæk-gnæk* ;o)
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.