webForumDet fria alternativet

indexOf klassnamn och value == 0 fungerar ej

5 svar · 339 visningar · startad av phred

phredMedlem sedan nov. 2005314 inlägg
#1

EDIT*
Jag ber er läsa tråden och komma med ev tips och trix, men huvudfrågan är löst inputs.className.indexOf('required') ska ju vara inputs.className.indexOf('required') > -1 för att det ska fungera :r
*************************

Hej!
Nu är jag här igen, jag har pillat ihop ett script som validerar ett antal input="text" men endast om required finns med i class="".

Dock fungerar det inte som jag vill, jag trodde att jag hade löst hela biten, men icke!

function validateForm(theForm, mess){
	var formNamee = theForm.name;
	var inputs = document.getElementsByTagName('input');
	for (var i = 0; i < inputs.length; i++) {
		if(inputs[i].className.indexOf('required') && inputs[i].value == 0){
			var reqID = inputs[i].id;
			var reqName = inputs[i].alt;
					nAlert(mess, reqID, formNamee, reqName);
					return false;
		}
	}
}

theForm = this från formuläret.
mess = 'felmeddelandet man vill visa' från formuläret.

if(inputs.className.indexOf('required') && inputs.value == 0) den här raden hade jag hoppats skulle ge det resultat jag är ute efter, nämligen att visa min alertruta om klassen innehåller required och value är tomt.

Dock så kollar den alla inputs jag har, även de som har klass asdf osv.

Nedan visas mitt formulär.

<form name="sForm" id="sForm" method="post" action="test.asp" onsubmit="return validateForm(this, 'Du har glömt följande fält:')">
                <input type="text" id="one" name="one" class="asdf"/>
                <input type="text" id="sString" name="sString" alt="Första obligatoriska fältet." class="none required" />
                <input type="text" id="two" name="two" alt="Andra obligatoriska fältet." class="none required"/>
                <input type="text" id="three" name="three" class="asdf"/>
                <input type="submit" value="Skicka"/>
                </form>

Hoppas någon kan hjälpa mig, kan man göra det bättre ? Tveka inte att hacka på mig, jag håller precis på att lära mig detta ;)

/F

phredMedlem sedan nov. 2005314 inlägg
#2

Har skrivit om koden enligt nedan, dock så verkar det som att den kollar alla <input ändå. jag vill ju bara att den ska kolla de inputs som har required i className och där value är tomt. Vad har jag gjort fel egentligen ? :)

function validateForm(theForm, mess){
	var formNamee = theForm.name;
	var inputs = document.getElementsByTagName('input');
        var reqID = new Array();
        var reqName = new Array();
	for (var i = 0; i < inputs.length; i++) {
		if(inputs[i].className.indexOf('required') > -1 && inputs[i].value == 0){
			var reqID[i] = inputs[i].id;
			var reqName[i] = inputs[i].alt;

		}
	}
			nAlert(mess, reqID[1], formNamee, reqName);
			return false;
}

EDIT*
En fråga till, hur i hela världen replacar jag "," komma ?
har läst flera exempel som säger str.replace(/,/g,'.'); Men det fungerar väldigt dåligt för mig, förslag där ?

SPiNMedlem sedan mars 20007 896 inlägg
#3

Det fungerar utmärkt för mig i både FF och IE att göra som du gör.

Ang. replace så fungerar det perfekt också.

var str = "Här, är, några, komman,";
var newstr = str.replace(/,/g, ".");
phredMedlem sedan nov. 2005314 inlägg
#4

aha ok, då är jag med på det där med replace.
jag trodde man kunde skriva ut den med str.replace osv.

Fungerar det utmärkt att ha med typ 4st input="text" och sätta required som class på två av dem ?

För mig så kollar den alla ändå. Får kolla så det inte är något annat som ställer till det då.

SPiNMedlem sedan mars 20007 896 inlägg
#5

Det ser lite märkligt ut.
Inne i din for-loop;
Ta bort 'var' framför dina arrayer 'reqID' och 'reqName' - dom är redan deklarerade som arrayer.
Du sätter index med hjälp av 'i', men 'i' kan ibland hoppa över ett index i och med din if-sats - därför tror jag det verkar som att du får felet.

function validateForm(theForm, mess){
	var formNamee = theForm.name;
	var inputs = document.getElementsByTagName('input');
        var reqID = new Array();
        var reqName = new Array();
        var n = 0;

	for (var i = 0; i < inputs.length; i++) {
		if(inputs[i].className.indexOf('required') > -1 && inputs[i].value == 0){
			reqID[n] = inputs[i].id;
			reqName[n++] = inputs[i].alt;
		}
	}

        if(reqID.length() > 0)
               alert("Du har inte fyllt i de fält som är obligatoriska");
}
phredMedlem sedan nov. 2005314 inlägg
#6

ah, ok. Det där med variablerna hade jag redan ändrat, skrev det ur huvet nu så jag glömde ta bort dem.

Hade någon känsla av att i ställde till det, ska genast testa det där när jag kommer hem. tack sålänge.

EDIT*
Testat ock klart, din ändring fixade biffen, man tackar man tackar.

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