webForumDet fria alternativet

Kolla om input-fält innehåller ett numeriskt och ett postivt värde.

JavaScript

13 svar · 346 visningar · startad av trexter

Medlem sedan mars 20021 889 inlägg
Frågan#1
<script LANGUAGE="JScript"><!--

 function AbortEntry(sMsg, eSrc)
 {
  window.alert(sMsg);
  // set focus and highlight to the offending error
  eSrc.focus();
  //eSrc.select();
 }

 function HandleError(eSrc)
 {
  // make sure the input is a numeric value
  var val = parseInt(eSrc.value);
  if (isNaN(val))
  {
   return AbortEntry("Must be a number.", eSrc);
  }

  // make sure the value is not negative
  if (val <= 0) 
  {
   return AbortEntry("Please type a positive number", eSrc);
  }
 }

//-->
</script>
<input type="text" size="1" name="intQuantity" value="1" onChange="HandleError(this)"> st

Så här ser min kod ut. Om man sätter värdet till t.ex. -2 och
sedan klickar submit så får jag upp en alert-ruta... precis som jag
vill ha det. Men om jag sedan klickar på submit-rutan igen så
händer ingenting... inte alls som jag vill ha det. ;)

Hur ska jag fixa detta?

:)

Medlem sedan dec. 20025 483 inlägg
#2

Du kanske skulle kunna göra så här:

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

function HandleError( o ){
	var elm = o.elements[ "intQuantity" ];

	if( isNaN( parseInt( elm.value ) ) ){
		alert( "Must be a number." );
		elm.focus();
		return false;
	}
	else if( parseInt( elm.value ) <= 0 ){
		alert( "Please type a number greater than zero." );
		elm.focus();
		return false;
	}
};

//-->
</script>
</head>

<form onsubmit="return HandleError(this)">

<input type="text" size="1" name="intQuantity" value="1">

<input type="submit">

</form>

:)

Medlem sedan mars 20021 889 inlägg
#3

thx :)

Medlem sedan mars 20021 889 inlägg
#4

Jag skulle vilja använda detta scriptet på ett annat formulär också men det fungerar inte riktigt.

I det forumläret finns det flera (ett obestämt antal) fält som alla heter "intQuantity".

Jag vill inte att Något av fälten ska få innehålla otillåtna värden.

Nu får jag en alert-ruta om jag skriver in felaktiga värden och sedan postas forumläret. Scriptet kollar alltså bra ett av fälten.

Kan man på något sätt loopa genom alla fält med namnet "intQuantity" och kolla samtliga värden?

:)

Medlem sedan dec. 20025 483 inlägg
#5

Självklart:

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

function HandleError( o ){
	var elm = o.elements[ "intQuantity" ];

	for( var i=0; i < elm.length; i++ ){
		if( isNaN( parseInt( elm[ i ].value ) ) ){
			alert( "Must be a number." );
			elm[ i ].focus();
			return false;
		}
		else if( parseInt( elm[ i ].value ) <= 0 ){
			alert( "Please type a number greater than zero." );
			elm[ i ].focus();
			return false;
		}
	}
};

//-->
</script>
...

:)

Medlem sedan mars 20021 889 inlägg
#6

Exakt som jag ville ha det!
Tack så väldeligans!

:birp :bire

Medlem sedan dec. 20025 483 inlägg
#7

:bire

Medlem sedan mars 20021 889 inlägg
#8

Hmm... en sak bara. Om jag skriver "a32" så säger in scriptet ifrån.

:)

Medlem sedan sep. 20021 655 inlägg
#9

Det är för att du i kontrollen (enligt scriptet som Peter skrev) kör parseInt() på värdet, och då kommer värdet "a32" att ge "32", som helt riktigt är ett tal.

Testa att ändra följande rad

if( isNaN( parseInt( elm[ i ].value ) ) ){

till

if( isNaN( elm[ i ].value ) ){
Medlem sedan mars 20021 889 inlägg
#10

fel: i är odefinierad.

:)

Medlem sedan dec. 20025 483 inlägg
#11

parseInt( "a32" ) kommer inte att ge värdet 32, utan NaN, så skriptet skall fungera ( om du använder fler än ett "input"-element med namnet "intQuantity" d.v.s. Annars får du använda den första versionen jag postade ).

Fast å andra sidan är parseInt() onödig att ha med, så du kan gott och väl använda använda dectgaps förslag.

:)

Medlem sedan sep. 20021 655 inlägg
#12

Sorry, jag hade visst lite fel.
Dock ger parseInt('32a') svaret 32, som alltså är ett tal, och om jag har förstått det hela rätt ska man bara få skriva tal i rutan.

Har du fortfarande problem att få det hela att fungera, trexter? Tänk på att du måste ha flera fält som heter "intQuantity", annars kommer scriptet inte att fungera.

Medlem sedan mars 20021 889 inlägg
#13

Hmm... nu fungerar inte någonting längre. Kan jag få koden för:
a) Kolla igenom Flera fält och Inte tillåta "4m".
b) Kolla igenom Ett fält och Inte tillåta "4m".

:)

Medlem sedan dec. 20025 483 inlägg
#14

Detta fungerar oavsett antalet fält:

function HandleError( o ){
	var elm = o.elements[ "intQuantity" ];

	if( typeof( elm.length ) == "number" ){
		for( var i=0; i < elm.length; i++ ){
			if( isNaN( elm[ i ].value ) ){
				alert( "Must be a number." );
				elm[ i ].focus();
				return false;
			}
			else if( parseInt( elm[ i ].value ) <= 0 ){
				alert( "Please type a positive number greater than zero." );
				elm[ i ].focus();
				return false;
			}
		}
	} else {
		if( isNaN( elm.value ) ){
			alert( "Must be a number." );
			elm.focus();
			return false;
		}
		else if( parseInt( elm.value ) <= 0 ){
			alert( "Please type a number greater than zero." );
			elm.focus();
			return false;			
		}
	}
};

//-->
</script>

:)

271 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
124 ms — deklarationer (db)
0 ms — hämta statistik (cache)
142 ms — hämta tråd, inlägg och bilagor (db)
126 ms — ändringar (db)