webForumDet fria alternativet

for loop och kolla flera text fält

2 svar · 200 visningar · startad av Patrik81

Patrik81Medlem sedan okt. 2001538 inlägg
#1

Nu har jag ett nytt problem, som jag gärna får lite synpunkter på...

Jag har en sida där jag skall kolla igenom x antal textfält och se om de blivit ändrade (de har ett värde från början) när de submittas. Om de inte blivit ändrade skall scriptet disable:a just det textfältet, så att man slipper att det postas (för det kan bli många textfält och antalet varierar alltid)

lite kod

<html>
<head>
<title>test</title>
<script>
<!--
function verify(){
for (var i = 1, i > 10, i = i + 1){
 var test = "testform.text"+i+".value";
 var diss = "testform.text"+i+".disabled";
 if (var test == 0 || var test == '' || var test == ' '){
  var diss = true;
 }
}
testform.submit();
}
//-->
</script>
</head>
<body>
<form name="testform" action="test2.htm" method="get">
<input type="text" name="text1" value="0" onFocus="this.select();"><br>
<input type="text" name="text2" value="0" onFocus="this.select();"><br>
<input type="text" name="text3" value="0" onFocus="this.select();"><br>
<input type="text" name="text4" value="0" onFocus="this.select();"><br>
<input type="text" name="text5" value="0" onFocus="this.select();"><br>
<input type="text" name="text6" value="0" onFocus="this.select();"><br>
<input type="text" name="text7" value="0" onFocus="this.select();"><br>
<input type="text" name="text8" value="0" onFocus="this.select();"><br>
<input type="text" name="text9" value="0" onFocus="this.select();"><br>
<input type="button" onClick="verify()" value="Skicka">
</form>
<script>
document.testform.text1.focus();
</script>
</body>
</html>

men denna koden fungerar ju inte för då klagar scriptet på att ett objekt förväntas på rad 30 (raden där man kallar på scriptet vi knappen)

Hur får man scriptet att förstå att det inte är en sträng den skall jämföra med utan
testform.textX.value den skall kolla mot, där X är en siffra som motsvarar ett textfält?

Jag kan ju lösa det med en himlans massa if-satser, men det är ju varken snyggt eller prestanda-bra...

Någon som kan hjälpa mig?

MVH Patrik

JojoxxMedlem sedan juni 20004 308 inlägg
#2
<body onLoad="initForm(document.myForm);">
<script language="JavaScript" type="text/javascript">
var formObj=new Object;
function initForm(obj){
	for(var i=0;i<obj.length;i++){
		if(obj[i].type=="text"){ formObj[obj[i].name]=obj[i].value; }
	}
}
function disableUnchanged(obj){
	for(var i=0;i<obj.length;i++){
		if(obj[i].type=="text" && obj[i].value==formObj[obj[i].name]){ obj[i].disabled=true; }
	}
}
</script>
<form action="somepage.asp" name="myForm" method="get" onSubmit="disableUnchanged(this); return true">
<input type="text" name="foo" value="gaa">
<input type="submit" value="skicka">
</form>

Funktionen initForm() skapar alltså ett objekt (formObj) där alla värden av text-fälten i formuläret sparas vid onLoad. Sedan jämförs detta objekt med formuläret vid onSubmit och de fält som är oförändrade disable'as. Enjoy.

Patrik81Medlem sedan okt. 2001538 inlägg
#3

Jojoxx, du är min Gud.

Tack så himla mycket det funkar jättebra.
*himlans glad*
MVH Patrik

140 ms totalt · 3 externa anrop · v20260731065814-full.fb544a5a
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
137 ms — hämta tråd, inlägg och bilagor (db)