04. oktober 2005 - 21:26
Der er
22 kommentarer og 1 løsning
onsubmit funktion
Hej. Jeg har en funktion, jeg gerne vil have kørt via <form onsubmit="submitter(); return false;" ...> Den ser således ud. function submitter() { error = 0; if((document.getElementById('titel_1').value=='') && !(document.getElementById('file_1').value=='') && (error==0)) { alert('Du mangler at give billede 1 en titel!'); document.getElementById('titel_1').focus(); error = 1; } if((document.getElementById('titel_2').value=='') && !(document.getElementById('file_2').value=='') && (error==0)) { alert('Du mangler at give billede 2 en titel!'); document.getElementById('titel_2').focus(); error = 1; } if((document.getElementById('titel_3').value=='') && !(document.getElementById('file_3').value=='') && (error==0)) { alert('Du mangler at give billede 3 en titel!'); document.getElementById('titel_3').focus(); error = 1; } if((document.getElementById('titel_4').value=='') && !(document.getElementById('file_4').value=='') && (error==0)) { alert('Du mangler at give billede 4 en titel!'); document.getElementById('titel_4').focus(); error = 1; } if((document.getElementById('titel_5').value=='') && !(document.getElementById('file_5').value=='') && (error==0)) { alert('Du mangler at give billede 5 en titel!'); document.getElementById('titel_5').focus(); error = 1; } if(error == 1) { document.getElementById('uploadBefore').style.display='none'; document.getElementById('uploadNow').style.display='block'; document.getElementById('uploadNowTop').style.display='block'; document.getElementById('formen').submit(); } else { return false; } } Den virker bare ikke i safari og Firefox :( alle Id'er som der henvises til findes. Men det er som om den ikke kan finde ud af det med return false Det virker tilsyneladende fint i IE.
Annonceindlæg fra Edora
04. oktober 2005 - 21:29
#1
<form onsubmit="return submitter();">
04. oktober 2005 - 21:32
#2
OG så vil det være en god idé at isolere document.getElementById i en funktion = læsevenlighed :-) function getEle( eleId ){ if( typeof( eleId ) == "undefined" ){ alert("kodehodefejl: id´et " + eleId + " findes ikke!") return false } return document.getElementById(eleId) }
04. oktober 2005 - 21:37
#3
function submitter() { error = 0; if( isEmpty('titel_1') && isEmpty('file_1') && error==0)) { alert('Du mangler at give billede 1 en titel!'); getEle('titel_1').focus(); error = 1; } ...osv er masse validering ... if(error == 1) { getEle('uploadBefore').style.display='none'; getEle('uploadNow').style.display='block'; getEle('uploadNowTop').style.display='block'; getEle('formen').submit(); } else { return false; } } function getEle( eleId ){ if( typeof( eleId ) == "undefined" ){ alert("kodehodefejl: id´et " + eleId + " findes ikke!") return false } return document.getElementById(eleId) } function isEmpty( eleId ){ if( getEle(eleId).value == "") return true return false }
04. oktober 2005 - 21:38
#4
Scriptet behøver jo ikke være læsevenligt :) Bare det virker og er optimalt. Ser ikke hvad jeg vinder på at lave en funktion til det. (Rent performence mæssigt altså). Hvad angår ændringen i onsubmit="" hjalp det mig ikke.
04. oktober 2005 - 21:38
#5
så er det pludseligt laaaangt nemmere at gennemskue. Når der er for megen kode der går igen giver det "støj" og gør koden svær at gennemskue for både en selv og mange andre ;-) ergo undgå støj
04. oktober 2005 - 21:39
#6
ændre document.getElementById('formen').submit(); til return true
04. oktober 2005 - 21:40
#7
Det er måske værd at nævne, at jeg både i safari og firefox får en alert, men at den submitter alligevel...
04. oktober 2005 - 21:40
#8
ændring til return true har jeg lige prøvet uden gavn
04. oktober 2005 - 21:41
#9
og så sætter du error = 1 i alle valideringsrunder når der opstår fejl og til sidst chekcer du om fejlen er 1 og hvis ja submit ?? ?-|
04. oktober 2005 - 21:44
#10
function submitter() { var msgAlert = "" if( isEmpty('titel_1') ){ msgAlert += "Du mangler at udfylde titel 1\n" } if( isEmpty('titel_2') ){ msgAlert += "Du mangler at udfylde titel 2\n" } ..osv if( msgAlert == "" ){ return true //Ingen fejl = submit } else { alert( msgAlert ) //Fejl fundet alert brugeren og returner false ergo submit _ikke_ return false }
04. oktober 2005 - 22:08
#11
Har nu prøvet: function TjekForm() { msgAlert = ""; if((document.getElementById('titel_1').value=='') && !(document.getElementById('file_1').value=='')) { msgAlert = "Du mangler at give billede 1 en titel!"; msgFocus = "titel_1"; } if((document.getElementById('titel_2').value=='') && !(document.getElementById('file_2').value=='')) { msgAlert += "Du mangler at give billede 2 en titel!"; msgFocus = "titel_2"; } if((document.getElementById('titel_3').value=='') && !(document.getElementById('file_3').value=='')) { msgAlert += "Du mangler at give billede 3 en titel!"; msgFocus = "titel_3"; } if((document.getElementById('titel_4').value=='') && !(document.getElementById('file_4').value=='')) { msgAlert += "Du mangler at give billede 4 en titel!"; msgFocus = "titel_4"; } if((document.getElementById('titel_5').value=='') && !(document.getElementById('file_5').value=='')) { msgAlert += "Du mangler at give billede 4 en titel!"; msgFocus = "titel_4"; } if(msgAlert == "") { document.getElementById('uploadBefore').style.display='none'; document.getElementById('uploadNow').style.display='block'; document.getElementById('uploadNowTop').style.display='block'; return true; } else { alert(msgAlert); document.getElementById(msgFocus).focus(); return false; } } i formen skriver jeg onsubmit="return TjekForm();"
04. oktober 2005 - 22:14
#12
og hvad får du af fejl ? husk at sætte [\n] bagest i msgAlert da dette betyder linieskift i alertboksen
04. oktober 2005 - 22:16
#13
Ja, det havde jeg lige glemt det med linjeskift. Jeg får ingen fejl, den submitter bare. Før jeg ændrede til det med msgAlert, så fik jeg dog min alert inden den submittede.
04. oktober 2005 - 22:33
#14
Det virker fint i IE, men ikke safari og firefox. Tror det har noget med return false tingen at gøre.
04. oktober 2005 - 23:58
#15
<ole> Prøv med et link til siden, for det må være et andet sted, du laver fejl. F.eks. forsøger du forhåbentlig ikke at adressere dine felter med 'getElementById' uden at give dem en ID? Det er kun IE, der er tåbelig nok til at bruge en name-attribut. Alle andre browsere kræver - i fuld overensstemmelse med standarden for ECMA-DOM bindings - en ID :) /mvh </bole>
05. oktober 2005 - 07:07
#16
Jeg husker naturligvis ID. Da systemet er lukket med login m.v. er dette nok lettere: <script language="JavaScript"> function TjekForm() { msgAlert = ""; if((document.getElementById('titel_1').value=='') && !(document.getElementById('file_1').value=='')) { msgAlert = "Du mangler at give billede 1 en titel!"; msgFocus = "titel_1"; } if((document.getElementById('titel_2').value=='') && !(document.getElementById('file_2').value=='')) { msgAlert += "Du mangler at give billede 2 en titel!"; msgFocus = "titel_2"; } if((document.getElementById('titel_3').value=='') && !(document.getElementById('file_3').value=='')) { msgAlert += "Du mangler at give billede 3 en titel!"; msgFocus = "titel_3"; } if((document.getElementById('titel_4').value=='') && !(document.getElementById('file_4').value=='')) { msgAlert += "Du mangler at give billede 4 en titel!"; msgFocus = "titel_4"; } if((document.getElementById('titel_5').value=='') && !(document.getElementById('file_5').value=='')) { msgAlert += "Du mangler at give billede 4 en titel!"; msgFocus = "titel_4"; } if(msgAlert == "") { document.getElementById('uploadBefore').style.display='none'; document.getElementById('uploadNow').style.display='block'; document.getElementById('uploadNowTop').style.display='block'; return true; } else { alert(msgAlert); document.getElementById(msgFocus).focus(); return false; } } </script> <form action="/scripts/upload.php" method="post" enctype="multipart/form-data" style="margin:0px;" id="formen" onsubmit="return TjekForm(); return false;"> <select name="folder"><option value="28">En god dag</option><option value="27">Ferie 2005</option><option value="1">Generel</option><option value="31">Musik</option></select> <div class="header">Vælg billeder</div> <div style="display:none;" id="uploadNowTop"><h1>Dine billeder uploades nu!</h1><p>Vent venligst...</p></div> <table style="width:100%;"> <tr> <td><p style="font-weight:bold; margin:0px;">Vælg billede</p></td> <td><p style="font-weight:bold; margin:0px;">Giv billedet en titel</p></td> <td><p style="font-weight:bold; margin:0px;">Ønsker du vurderinger?</p></td> </tr> <tr> <td><input name="userfile_1" id="file_1" type="file" /></td> <td><input name="titel_1" id="titel_1" type="text" /></td> <td><p style="margin:0px;">Ja <input type="radio" name="rating_1" value="1" checked="checked" /> Nej <input type="radio" name="rating_1" value="0" /></p></td> </tr> <tr> <td><input name="userfile_2" id="file_2" type="file" /></td> <td><input name="titel_2" id="titel_1" type="text" /></td> <td><p style="margin:0px;">Ja <input type="radio" name="rating_2" value="1" checked="checked" /> Nej <input type="radio" name="rating_2" value="0" /></p></td> </tr> <tr> <td><input name="userfile_3" id="file_3" type="file" /></td> <td><input name="titel_3" id="titel_3" type="text" /></td> <td><p style="margin:0px;">Ja <input type="radio" name="rating_3" value="1" checked="checked" /> Nej <input type="radio" name="rating_3" value="0" /></p></td> </tr> <tr> <td><input name="userfile_4" id="file_4" type="file" /></td> <td><input name="titel_4" id="titel_4" type="text" /></td> <td><p style="margin:0px;">Ja <input type="radio" name="rating_4" value="1" checked="checked" /> Nej <input type="radio" name="rating_4" value="0" /></p></td> </tr> <tr> <td><input name="userfile_5" id="file_5" type="file" /></td> <td><input name="titel_5" id="titel_5" type="text" /></td> <td><p style="margin:0px;">Ja <input type="radio" name="rating_5" value="1" checked="checked" /> Nej <input type="radio" name="rating_5" value="0" /></p></td> </tr> </table> <div style="display:none;" id="uploadNow"><h1>Dine billeder uploades nu!</h1><p>Vent venligst...</p></div> <div id="uploadBefore" style="margin:0px; text-align:center; margin-top:10px;"> <input type="submit" value="Upload" /> </diV>
06. oktober 2005 - 16:33
#17
Prøv: onsubmit="return TjekForm();" ;o)
06. oktober 2005 - 16:41
#18
har jeg også prøvet.
10. oktober 2005 - 22:21
#19
Funktionen findes online på
www.fotoupload.dk - det kræver dog en profil for at kunne uploade.
klik på Upload nye billeder i menuen.
11. oktober 2005 - 22:02
#20
Har nu prøvet at koge funktionen lidt ned, men lige meget hjælper det. function TjekForm() { msgAlert = ""; for(i=1; i<=5; i++) { if((document.getElementById('titel_'+i).value=='') && !(document.getElementById('file_'+i).value=='')) { msgAlert += "Du mangler at give billede "+ i +" en titel!\n"; msgFocus = "titel_"+i; } } if(msgAlert == "") { document.getElementById('uploadBefore').style.display='none'; document.getElementById('uploadNow').style.display='block'; document.getElementById('uploadNowTop').style.display='block'; document.getElementById('formen').submit(); dot(); } else { alert(msgAlert); document.getElementById(msgFocus).focus(); return false; } }
18. oktober 2005 - 12:57
#21
Det virker fint her - alle billed/titel-fejl kommer i alerten og focus sættes på sidste titel-fejl: <script type="text/javascript"> function TjekForm() { var tekst = ""; for(i=1; i<=5; i++) { var a = document.getElementById("file_"+i); var b = document.getElementById("titel_"+i); if(!a.value=="" && b.value=="") { tekst += "Du mangler at give billede "+ i +" en titel!\n"; minfocus = "titel_"+i; } } if(tekst !== ""){ alert(tekst); document.getElementById(minfocus).focus(); return false; } else { document.getElementById('uploadBefore').style.display='none'; document.getElementById('uploadNow').style.display='block'; document.getElementById('uploadNowTop').style.display='block'; document.getElementById('formen').submit(); dot(); } } </script> /psc :)
17. november 2005 - 13:30
#22
olebole> smid et svar. Jeg finder det fair dig og horsmark deler point.
18. november 2005 - 14:38
#23
Det er jeg ikke sikker på, jeg er enig i :) Jeg er igang med et større projekt for tiden - og har ikke haft så megen tid til at holde øje med spm, jeg deltager i. Derfor har jeg vist ikke hjulpet så meget her - og det ser ikke ud til, jeg har bidraget til en regulær løsning. I dette tilfælde vil jeg gerne holde mig udenfor pointene ... men tak for tanken ;o)
Vi tilbyder markedets bedste kurser inden for webudvikling