webForumDet fria alternativet

Lite annorlunda validering

12 svar · 491 visningar · startad av l-boy

l-boyMedlem sedan juli 2003221 inlägg
#1

Har ett formulär som innehåller ett ex antal fält, runt 10-20st som kallas för "lagX" där X är en siffra mellan 1-16 t.ex.

Innan detta postas vill jag gå igenom samtliga fält och kolla 2 saker.

1. Måste vara ett heltal mellan 1 och X.
2. Samma tal får inte förekomma 2 ggr.

Hur gör man detta tro?

Peter SMedlem sedan dec. 20025 483 inlägg
#2

Vet inte om jag förstått dig rätt

<script type="text/javascript">

var X = 16;

function v(o){
  var elms = o.elements,
      acc  = [];

  for (var i = 1; i <= X; ++i){
    if (!new RegExp("^([2-9]|(1[0-6]?))$").test(elms["lag" + i].value)){
      alert("Value must be between 1 and " + X + ", for 'lag" + i + "'");
      return false;
    } else if (acc.exists(parseInt(elms["lag" + i].value))){
      alert("Value '" + elms["lag" + i].value + "' already exists");
      return false;
    } else {
      acc.push_back(i);
    }
  }
  return true;
}

Array.prototype.exists = function(v){
  for (var i = 0; i < this.length; ++i){
    if (this[i] == v){
      return true;
    }
  }
  return false;
}

Array.prototype.push_back = function(e){
  this[this.length] = e;
}

</script>

<form onsubmit="return v(this)">
  <input type="text" name="lag1">
  <input type="text" name="lag2">
  <input type="text" name="lag3">
  <input type="text" name="lag4">
  <input type="text" name="lag5">
  <input type="text" name="lag6">
  <input type="text" name="lag7">
  <input type="text" name="lag8">
  <input type="text" name="lag9">
  <input type="text" name="lag10">
  <input type="text" name="lag11">
  <input type="text" name="lag12">
  <input type="text" name="lag13">
  <input type="text" name="lag14">
  <input type="text" name="lag15">
  <input type="text" name="lag16">
  <input type="submit">
</form>
l-boyMedlem sedan juli 2003221 inlägg
#3

Tror du har förstått mig rätt. Men det händer inte så mycket när jag försöker köra kåden.


<script language="JavaScript">
<!--

var X = 16;

function v(o){
  var elms = o.elements,
      acc  = [];

  for (var i = 1; i <= X; ++i){
    if (!new RegExp("^[2-9]|(1[0-6]?)$").test(elms["lag" + i].value)){
      alert("Value must be between 1 and " + X + ", for 'lag" + i + "'");
      return false;
    } else if (acc.exists(parseInt(elms["lag" + i].value))){
      alert("Value '" + elms["lag" + i].value + "' already exists");
      return false;
    } else {
      acc.push_back(i);
    }
  }
  return true;
}

Array.prototype.exists = function(v){
  for (var i = 0; i < this.length; ++i){
    if (this[i] == v){
      return true;
    }
  }
  return false;
}

Array.prototype.push_back = function(e){
  this[this.length] = e;
}

-->
</script>

<table width=100% align=center border=0 cellpadding=0 cellspacing=0>
<form name="bet_form" method="post" action="save.asp" onsubmit="return v(this);">	

<input type="text" name="lag1" maxlength="2" size="2" value="1">	
<input type="text" name="lag2" maxlength="2" size="2" value="1">	
<input type="text" name="lag3" maxlength="2" size="2" value="1">		

osv...		
				
<tr><td><input type="image" src="gfx/buttons/spara.gif"></td></tr>
</table>
</form>
Peter SMedlem sedan dec. 20025 483 inlägg
#4

Vad är det som inte fungerar? Variabeln X sätter du till antalet "lag"-fält. I mitt exempel är det 16, så med din kod blir det:

<script language="JavaScript">
<!--

var X = 16;

function v(o){
  var elms = o.elements,
      acc  = [];

  for (var i = 1; i <= X; ++i){
    if (!new RegExp("^([2-9]|(1[0-6]?))$").test(elms["lag" + i].value)){
      alert("Value must be between 1 and " + X + ", for 'lag" + i + "'");
      return false;
    } else if (acc.exists(parseInt(elms["lag" + i].value))){
      alert("Value '" + elms["lag" + i].value + "' already exists, for 'lag" + i + "'");
      return false;
    } else {
      acc.push_back(i);
    }
  }
  return true;
}

Array.prototype.exists = function(v){
  for (var i = 0; i < this.length; ++i){
    if (this[i] == v){
      return true;
    }
  }
  return false;
}

Array.prototype.push_back = function(e){
  this[this.length] = e;
}

-->
</script>

<table width=100% align=center border=0 cellpadding=0 cellspacing=0>
<form name="bet_form" method="post" action="save.asp" onsubmit="return v(this);">	

<input type="text" name="lag1" maxlength="2" size="2" value="1">	
<input type="text" name="lag2" maxlength="2" size="2" value="1">	
<input type="text" name="lag3" maxlength="2" size="2" value="1">		
<input type="text" name="lag4" maxlength="2" size="2" value="1">	
<input type="text" name="lag5" maxlength="2" size="2" value="1">	
<input type="text" name="lag6" maxlength="2" size="2" value="1">
<input type="text" name="lag7" maxlength="2" size="2" value="1">	
<input type="text" name="lag8" maxlength="2" size="2" value="1">	
<input type="text" name="lag9" maxlength="2" size="2" value="1">
<input type="text" name="lag10" maxlength="2" size="2" value="1">	
<input type="text" name="lag11" maxlength="2" size="2" value="1">	
<input type="text" name="lag12" maxlength="2" size="2" value="1">
<input type="text" name="lag13" maxlength="2" size="2" value="1">	
<input type="text" name="lag14" maxlength="2" size="2" value="1">	
<input type="text" name="lag15" maxlength="2" size="2" value="1">
<input type="text" name="lag16" maxlength="2" size="2" value="1">	
		
				
<tr><td><input type="image" src="gfx/buttons/spara.gif"></td></tr>
</table>
</form>

Om du nu har 16 sådana fält.

l-boyMedlem sedan juli 2003221 inlägg
#5

Ah mitt fel. Gjorde ju om skiten i natt minns jag ;) Nu heter fälten inte alltid lag1-lag16 etc. Utan siffran på slutet kan variera lite. Doh. Blire svårt då?

Peter SMedlem sedan dec. 20025 483 inlägg
#6

Vilka kriterier är det med andra ord som gäller?

l-boyMedlem sedan juli 2003221 inlägg
#7

Eller förresten. Jag gör om det på nytt istället. Tack så mycket för hjälpen!!

l-boyMedlem sedan juli 2003221 inlägg
#8

Så nu går skriptet igång och fälten heter lag1-lagX. Men inmatningen funkar inte alltid som den skall. Den klagar på att ett värde redan existerar trots att det inte använts innan. Använder mig av x=5 men det har väl ingen betydelse antar jag, och såklart bara fem fält, lag1-lag5.

Peter SMedlem sedan dec. 20025 483 inlägg
#9

Ser det ut enligt nedan då?

<script language="JavaScript">
<!--

var X = 5;

function v(o){
  var elms = o.elements,
      acc  = [];

  for (var i = 1; i <= X; ++i){
    if (!new RegExp("^([2-9]|(1[0-6]?))$").test(elms["lag" + i].value)){
      alert("Value must be between 1 and " + X + ", for 'lag" + i + "'");
      return false;
    } else if (acc.exists(parseInt(elms["lag" + i].value))){
      alert("Value '" + elms["lag" + i].value + "' already exists, for 'lag" + i + "'");
      return false;
    } else {
      acc.push_back(i);
    }
  }
  return true;
}

Array.prototype.exists = function(v){
  for (var i = 0; i < this.length; ++i){
    if (this[i] == v){
      return true;
    }
  }
  return false;
}

Array.prototype.push_back = function(e){
  this[this.length] = e;
}

-->
</script>

<table width=100% align=center border=0 cellpadding=0 cellspacing=0>
<form name="bet_form" method="post" action="save.asp" onsubmit="return v(this);">	

<input type="text" name="lag1" maxlength="2" size="2" value="1">	
<input type="text" name="lag2" maxlength="2" size="2" value="1">	
<input type="text" name="lag3" maxlength="2" size="2" value="1">		
<input type="text" name="lag4" maxlength="2" size="2" value="1">	
<input type="text" name="lag5" maxlength="2" size="2" value="1">	

		
				
<tr><td><input type="image" src="gfx/buttons/spara.gif"></td></tr>
</table>
</form>
l-boyMedlem sedan juli 2003221 inlägg
#10

Exakt. Fast value är satt till 1 på lag1, 2 på lag 2, 3 på lag3 osv. Som standard. Men så fort jag börjar flytta om ordningen blir det tokigt.

Value 4 already exists for lag5, trots att lag5 är enda fältet som tilldelats en 4 etc.

Peter SMedlem sedan dec. 20025 483 inlägg
#11

Oops! Så här skall det vara:

function v(o){
  var elms = o.elements,
      acc  = [];

  for (var i = 1; i <= X; ++i){
    if (!new RegExp("^[1-5]$").test(elms["lag" + i].value)){
      alert("Value must be between 1 and " + X + ", for 'lag" + i + "'");
      return false;
    } else if (acc.exists(parseInt(elms["lag" + i].value))){
      alert("Value '" + elms["lag" + i].value + "' already exists, for 'lag" + i + "'");
      return false;
    } else {
      acc.push_back(parseInt(elms["lag" + i].value));
    }
  }
  return true;
}
l-boyMedlem sedan juli 2003221 inlägg
#12

Nuså! Tackar och bockar!

Eller en liten sak till förresten, om X varierar från gång till gång måste det väl gå att ha det som ett argument i funktionen va?

Peter SMedlem sedan dec. 20025 483 inlägg
#13

Ett exempel på hur det kan se ut då:

<script language="JavaScript">
<!--

function v(o, x){
  var elms = o.elements,
      acc  = [],
      re   = "^([1-";

  if (x < 10){
    re += x + "])$";
  } else {
    re += "9]";

    for (var i = 0; i < Math.floor(x / 10); ++i){
      re += "|(" + (i + 1);
      re += "[0-" + (i + 1 >= Math.floor(x / 10) ? (x % 10) : 9) + "]";
      re += ")";
    }

    re += ")$";
  }

  for (var i = 1; i <= x; ++i){
    if (!new RegExp(re).test(elms["lag" + i].value)){
      alert("Value must be between 1 and " + x + ", for 'lag" + i + "'");
      return false;
    } else if (acc.exists(parseInt(elms["lag" + i].value))){
      alert("Value '" + elms["lag" + i].value + "' already exists, for 'lag" + i + "'");
      return false;
    } else {
      acc.push_back(parseInt(elms["lag" + i].value));
    }
  }
  return true;
}

Array.prototype.exists = function(v){
  for (var i = 0; i < this.length; ++i){
    if (this[i] == v){
      return true;
    }
  }
  return false;
}

Array.prototype.push_back = function(e){
  this[this.length] = e;
}

-->
</script>

<table width=100% align=center border=0 cellpadding=0 cellspacing=0>
<form name="bet_form" method="post" action="save.asp" onsubmit="return v(this, 16);">	

<input type="text" name="lag1" maxlength="2" size="2" value="1">	
<input type="text" name="lag2" maxlength="2" size="2" value="1">	
<input type="text" name="lag3" maxlength="2" size="2" value="1">		
<input type="text" name="lag4" maxlength="2" size="2" value="1">	
<input type="text" name="lag5" maxlength="2" size="2" value="1">	
<input type="text" name="lag6" maxlength="2" size="2" value="1">
<input type="text" name="lag7" maxlength="2" size="2" value="1">	
<input type="text" name="lag8" maxlength="2" size="2" value="1">	
<input type="text" name="lag9" maxlength="2" size="2" value="1">
<input type="text" name="lag10" maxlength="2" size="2" value="1">	
<input type="text" name="lag11" maxlength="2" size="2" value="1">	
<input type="text" name="lag12" maxlength="2" size="2" value="1">
<input type="text" name="lag13" maxlength="2" size="2" value="1">	
<input type="text" name="lag14" maxlength="2" size="2" value="1">	
<input type="text" name="lag15" maxlength="2" size="2" value="1">
<input type="text" name="lag16" maxlength="2" size="2" value="1">

<tr><td><input type="image" src="gfx/buttons/spara.gif"></td></tr>
</table>
</form>
134 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
131 ms — hämta tråd, inlägg och bilagor (db)