webForumDet fria alternativet

Dra av från en summa i flera fält

JavaScript

2 svar · 447 visningar · startad av dreas

Medlem sedan jan. 2004140 inlägg
Frågan#1

Hej!
Jag sitter och fnurlar på en kod som ska fungera på följande sätt:
- Användaren har ett visst antal totala Creds. Dessa totala creds ska användaren kunna fritt disponera i flera textfält, som renderas av PHP kod vilket gör att det kan vara alltifrån 1 till 10.
För exemplet tar vi 3 textfält.
- Om användaren har totalt 100 Creds, och skriver in 60 i första fältet så ska den totala summan minskas med just 60. Om Användaren sedan skriver in 30 i nästa fält återstår 10 kvar. Om nu användaren skulle ange MER än 10, låt oss säga 20 får han ett felmeddelande och fältetsinput ändras automatiskt till hans nuvarande maxbelopp (i detta fall 10).

Försöker göra det så tydligt som möjligt. Och nu den kod jag än så länge trixat lite med (en variant av jojoxx's kod, still going strong :) ):

function quickTot(obj,dispobj,max_wgr){
	
	if(obj.value.length>max_wgr){
		alert('Du har överskridit din maxinsats; '+max_wgr+'.');
		obj.focus();		
	}
	
	dispobj.value=max_wgr-obj.value;

}

---

<li id=\"wager\">Insats<br/><input type=\"text\" name=\"wager_".$quick_id."\" size=\"3\" onkeyup=\"quickTot(this,this.form.display,100);\" onkeypress=\"quickTot(this,this.form.display,100);\" /></li>

<input type=\"text\" name=\"display\" size=\"4\" value=\"100\" disabled=\"disabled\" onfocus=\"this.blur();\">

Det som händer med ovanstående kod är att när man skriver i ett fält så sänks värdet med det man angett. Men går man på nästa fält, återställs maxbeloppet till i exemplet 100. Så varje fält fungerar individuellt, men de länkas inte samman till maxbeloppet.
Hur ska jag göra?

Medlem sedan jan. 2004140 inlägg
#2

Efter lite för mycket bök blev det en fulkodning :)

echo("
<li>".$nextQuick[$i]['home_short']."<br/><input name=\"quick_".$quick_id."\" type=\"radio\" value=\"1\" /></li>
<li>X<br/><input name=\"quick_".$quick_id."\" type=\"radio\" value=\"X\" /></li>
<li>".$nextQuick[$i]['away_short']."<br/><input name=\"quick_".$quick_id."\" type=\"radio\" value=\"2\" /></li>");

echo("
<li id=\"wager\">Insats<br/><input type=\"text\" name=\"wager_".$i."\" value=\"0\" id=\"quick_wgr\" size=\"3\" 
onkeyup=\"document.quickForm.quickTot.value=");

for($j=0;$j<sizeof($nextQuick);$j++){
		echo("+eval(document.quickForm.wager_".$j.".value)");
}
 
echo("\" onblur=\"
if(document.quickForm.quickCreds.value<document.quickForm.quickTot.value) { 
alert('Du har överskridit din maxinsats på '+document.quickForm.quickCreds.value+' creds');
document.quickForm.wager_".$j.".value=document.quickForm.wager_".$j.".value-(document.quickForm.quickTot.value-document.quickForm.quickCreds.value);
} \" /></li>");

Fungerar som det ska.. men dock verkar inte den sista raden vilja vara med och leka. Jag vill ju ändra i det fältet där man skriver in en siffra som gör att summan överskrider antalet tillåtna (creds), till det maxtillåtna beloppet vid det tillfället.
Dvs denna rad:

document.quickForm.wager_".$j.".value = document.quickForm.wager_".$j.".value - (document.quickForm.quickTot.value-document.quickForm.quickCreds.value);

Någon som har lite input?

Medlem sedan jan. 2004140 inlägg
#3

Tack för din hjälp dreasdea! ;)

Här är iaf den korrekta koden, fick tweaka den lite med i grund och botten ropa jag på fel namn i formulärfältet:

echo("
<li id=\"wager\">Insats<br/><input type=\"text\" name=\"wager_".$i."\" value=\"0\" id=\"quick_wgr\" size=\"2\" 
onkeyup=\"document.quickForm.quickTot.value=");

for($j=0;$j<sizeof($nextQuick);$j++){
		echo("+eval(document.quickForm.wager_".$j.".value)");
}
 
echo("\" onblur=\"
var diff = eval(document.quickForm.quickTot.value)-eval(document.quickForm.quickCreds.value);
if(diff>0) {					
alert('Du har överskridit din maxinsats på '+document.quickForm.quickCreds.value+' creds med '+diff+' ');
document.quickForm.wager_".$i.".value = eval(document.quickForm.wager_".$i.".value)-diff;
document.quickForm.wager_".$i.".focus();
document.quickForm.quickCredsView.value = 0;
}
else{
document.quickForm.quickCredsView.value = eval(document.quickForm.quickCreds.value)-eval(document.quickForm.quickTot.value);
}
 \" />");

Samt

<input type=\"hidden\" class=\"hidden\" id=\"quickCreds\" name=\"quickCreds\" size=\"4\" value=\"".$creds."\" disabled=\"disabled\" />
			<input type=\"hidden\" class=\"hidden\" id=\"quickTot\" name=\"quickTot\" size=\"4\" disabled=\"disabled\" />
			<br/>Dina creds: <input type=\"text\" id=\"quickCredsView\" name=\"quickCredsView\" size=\"4\" value=\"".$creds."\" disabled=\"disabled\" onfocus=\"this.blur();\">

Fulkodat och klart! :)

270 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
130 ms — deklarationer (db)
0 ms — hämta statistik (cache)
135 ms — hämta tråd, inlägg och bilagor (db)
132 ms — ändringar (db)