l-boyMedlem sedan juli 2003221 inlägg 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 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 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 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 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 Vilka kriterier är det med andra ord som gäller?
l-boyMedlem sedan juli 2003221 inlägg 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 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 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 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 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 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 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>