webForumDet fria alternativet
Logga in / Bli medlem

Validera textrutor (XX:YY)

JavaScript

19 svar · 1 297 visningar · startad av Peeer

Medlem sedan mars 20025 907 inlägg
Trådstart#1
<form action="add.php?add=results&step=3" method="post">
<input type="hidden" name="compid" value="1">
<tr><td><input type="text" name="u3" class="form"></td></tr>
<tr><td><input type="text" name="u6" class="form"></td></tr>
<tr><td><input type="text" name="u7" class="form"></td></tr>
<tr><td><input type="text" name="u5" class="form"></td></tr>
<tr><td><input type="text" name="u45" class="form"></td></tr>
<input type="submit" value="Spara"></form>

När jag submitar formuläret så vill jag göra en koll på alla textrutor (de som har ett namn som börjar på u). Dessa ska vara skrivna i formatet XX:YY alternativt vara lämnade tomma. XX kan vara allt mellan 00 och 59, samma sak gäller för YY.
Dvs "00:59", "59:59", "", "15:00" är godkända, medans "0a:15", "00:60", "0015" inte är godkända. Hur gör jag detta?

Medlem sedan dec. 20025 483 inlägg
#2
<head>

<script type="text/javascript">
<!--

function validate(o){
	var f=o.elements,i=f.length;

	while(i-->0){
		if(f[i].name.indexOf("u")==0){
			if(f[i].value.length<1){
				continue;
			}
			if(!/^([0-5]{1}[0-9]{1}):([0-5]{1}[0-9]{1})$/.test(f[i].value)){
				alert("Fel");
				return false;
			}
		}
	}
};

//-->
</script>

</head>

...

<form action="add.php?add=results&step=3" method="post" onsubmit="return validate(this)">
<input type="hidden" name="compid" value="1">
<tr><td><input type="text" name="u3" class="form"></td></tr>
<tr><td><input type="text" name="u6" class="form"></td></tr>
<tr><td><input type="text" name="u7" class="form"></td></tr>
<tr><td><input type="text" name="u5" class="form"></td></tr>
<tr><td><input type="text" name="u45" class="form"></td></tr>
<input type="submit" value="Spara"></form>

:)

Medlem sedan mars 20025 907 inlägg
#3

Tackar!
Testar när jag kommer hem. :)

Medlem sedan mars 20025 907 inlägg
#4

Det fungerade utmärkt. Tackar!

Medlem sedan feb. 20034 441 inlägg
#5

Jag skulle behöva ha lite hjälp med att modifiera ovanstående JS-Funktion litegrann.
Det är så att jag har ett formulär som skrivs ut dynamsikt och behöver kolla så at alla fält (alla är av typen "text") är ifyllda.

Formuläret består av3 stycken fält på varje "rad" ('mItem_SE', 'mItem_EN' samt 'mSOrder').

Hur ska jag göra?

Medlem sedan dec. 20025 483 inlägg
#6

Det beror på hur du vill att fälten skall valideras och när valideringen skall ske. Om de ej får vara tomma vid submit:

function trim(s){
    return s.replace(/(^\s)|(\s$)/g, "");
}

function validate(f){
    var elms = f.elements;

    if (trim(elms["mItem_SE"].value).length == 0){
        alert("SE");
        return false;
    }

    if (trim(elms["mItem_EN"].value).length == 0){
        alert("EN");
        return false;
    }

    if (trim(elms["mSOrder"].value).length == 0){
        alert("mSOrder");
        return false;
    }

    return true;
}

<form onsubmit="return validate(this)"...
Medlem sedan feb. 20034 441 inlägg
#7

Oj, det där ser jättebra ut, fullt användbart i mitt fall, men skulle man kanske kunna fixa till så den validerar "rätt" saker med en gång, kanske lätt att lägga in i ovanstående funktion?

Det är nämligen så att fält nummer 1 ('mItem_SE') är svenska , där får man fylla i max 50 tecken, a-ö, A-Ö, mellanslag etc.

Det andra fältet, (mItem_EN) är engelska och får således bara innehålla a-z, A-Z samt mellanslag etc.

Det tredje och sista fältet, ('mSOrder') är visningsordning för knapparna och får endast innehålla siffror, (1-9).

Nu är problemet att jag var tvungen att lägga till ID-Nummer för varje fältnamn, eftersom koden ligger i en Loop som kör en UPDATE till databasen på "varje varv".
Se http://www.webforum.nu/showthread.php?s=&threadid=129790&forumid=22 för mer info om själva koden.

Går det fortfarande att lösa det här på ett smidigt sätt, skulle behöva en validering av dessa fält.

Tack!

Medlem sedan dec. 20025 483 inlägg
#8
function remws(s){
    return s.replace(/\s/g, "");
}

function validate(obj){
    var elms = obj.elements,
	len  = elms.length;

    for (var i = 0; i < len; ++i){
	if (elms[i].type != "hidden"){
	    if (/^mItem_SE/.test(elms[i].name)
		    && !/^[\wåäö\/]+$/i.test(remws(elms[i].value))){
		alert(elms[i].name);
		return false;
	    } else if (/^mItem_EN/.test(elms[i].name)
		    && !/^[a-z0-9_\/]+$/i.test(remws(elms[i].value))){
		alert(elms[i].name);
		return false;
	    } else if (/^mSorder/.test(elms[i].name)
		    && !/^\d+$/.test(remws(elms[i].value))){
		alert(elms[i].name);
		return false;
	    }
	}
    }

    return true;
}

<form onsubmit="return validate(this)"...
Medlem sedan feb. 20034 441 inlägg
#9

Ahh, där satt den ;)

Tack så mkt!

Medlem sedan feb. 20034 441 inlägg
#10

Hmm, något är fel, när jag klistrar in koden i min js-fil, så lägger den av helt och hållet i Mozilla FF.

Koden ser ut såhär:

<!--
function remws(s){
    return s.replace(/\s/g, "");
}
//-->
<!--
function validate(obj){
    var elms = obj.elements,
	len  = elms.length;

    for (var i = 0; i < len; ++i){
	if (elms[ i ].type != "hidden"){
	    if (/^mItem_SE/.test(elms[ i ].name)
		    && !/^[\wåäö/]+$/i.test(remws(elms[ i ].value))){
		alert(elms[ i ].name);
		return false;
	    } else if (/^mItem_EN/.test(elms[ i ].name)
		    && !/^[\w/]+$/.test(remws(elms[ i ].value))){
		alert(elms[ i ].name);
		return false;
	    } else if (/^mSorder/.test(elms[ i ].name)
		    && !/^[1-9]$/.test(remws(elms[ i ].value))){
		alert(elms[ i ].name);
		return false;
	    }
	}
    }

    return true;
}
//-->

Det konstiga är att i IE så funkar allt skitbra, men det verkar som att FF inte längre hittar js-filen efter att jag klistrat in koden ovan, för samtliga funktioner i filen blir

'funktionsnamn' not defined.

Som sagt, allt funkar i IE, men i Mozilla lägger filen av helt och hållet om det innehåller scriptet ovan.
Vad gör man åt det här, aldrig råkat ut för't tidigare.

Tack!

/r wF gillade inte [ i] i mitt kodexempel ovan, så har särat på dessa i form av [ i ]

Medlem sedan dec. 20025 483 inlägg
#11

Jag hade glömt att escape:a ett tecken. Inlägget ovan är korrigerat.

Medlem sedan feb. 20034 441 inlägg
#12

Peter S skrev:

Jag hade glömt att escape:a ett tecken. Inlägget ovan är korrigerat.

Aha, då får man tacka igen, provar när jag kommer hem i eftermiddag och återkommer!

Medlem sedan feb. 20034 441 inlägg
#13

Peter S skrev:

Jag hade glömt att escape:a ett tecken. Inlägget ovan är korrigerat.

Tack, nu funkar jsfilen fullt ut igen, men i Mozilla finns fortf. en bugg.
Har man glömt en ruta så varnar den om det, precis som det ska vara. Men fyller man sedan i den (allt är då ifyllt) och trycker på submit så varnar den iaf. att rutan inte är ifylld.

Formuläret går således inte att posta.
Är det fortf. nått litet fel i koden?

Tack!

Medlem sedan dec. 20025 483 inlägg
#14

Fungerar kanon för mig. Kanske fyller du i "förbjudna" tecken i rutan?

Jag har uppdaterat validate() litet grand ytterligare.

Medlem sedan feb. 20034 441 inlägg
#15

Peter S skrev:

Fungerar kanon för mig. Kanske fyller du i "förbjudna" tecken i rutan?

Nä, klipper ut och klistrar in det som står.

Peter S skrev:

Jag har uppdaterat validate() litet grand ytterligare.

Jaha, får prova en sväng till, tack ;)

Medlem sedan feb. 20034 441 inlägg
#16

Peter S skrev:

Kanske fyller du i "förbjudna" tecken i rutan?

Ahh, jobbigt, du har rätt, det finns - (bindestreck) med i rutorna. Har du lust att lägga till så att det får vara bindestreck samt 0-9 i "mItem_SE/EN" ?

Sen ska jag sluta gnälla ;)
Tack!

Medlem sedan dec. 20025 483 inlägg
#17

Done!

Medlem sedan feb. 20034 441 inlägg
#18

Peter S skrev:

Done!

Tack & Bock!

Medlem sedan feb. 20034 441 inlägg
#19

Hmm, det stämmer fort. inte i FF.
I de svenska fälten får jag inte ange å, ä eller ö och i visningsordningsfälten får jag inte skriva '10'.

Det sistnämnda trodde jag att jag skulle klara av själv genom att byta ut [1-9] till [0-9], men det funkade inte :(

Medlem sedan dec. 20025 483 inlägg
#20

Det fungerar för mig. Jag har uppdaterat inlägget ovan för att reflektera möjligheten att kunna ange högre tal än 9.

398 ms totalt · 4 externa anrop · v20260731065814-full.51f67c91
122 ms — deklarationer (db)
128 ms — hämta statistik (db)
145 ms — hämta tråd, inlägg och bilagor (db)
120 ms — ändringar (db)