webForumDet fria alternativet

Kod som krockar?

20 svar · 626 visningar · startad av Asa

AsaMedlem sedan dec. 20011 860 inlägg
#1

Har denna valideringskoden men det fetstilta i koden verkar "krocka me varann" på nåt sätt!

function checkboxcheck(obj,name){
	var nn=0;
	for(var n=0;n<obj.length;n++){
		nn+=(obj[n].type=="checkbox"&&obj[n].checked&&(!name||name==obj[n].name))?1:0;
	}
	return(nn);
}

function UpdateRest(){ 
        [b]var elm = document.forms["form"].elements;[/b]

	if (document.form.namn.value==""){
		alert("Du glömde restaurangens namn!");
		return false;
	} else if (document.form.adress.value==""){
		alert("Du glömde skriva restaurangens adress!");
		return false;
	} else if (document.form.husnr.value==""){
		alert("Du glömde skriva restaurangens husnr!");
		return false;
	} else if (document.form.tel.value==""){
		alert("Du glömde skriva restaurangens telefonnummer!");
		return false;
	[b]} else if (!document.form.[url]www.value==[/url]""){
 		if (!/^http:\/\//.test(elm["www"].value)) {
			alert("Hemsideadressen måste börja med [url]http://[/url]");
			return false;
		}[/b]
	} else if (document.form.postnr.value==""){
		alert("Du glömde skriva restaurangens postnr!");
		return false;
	} else if (document.form.ort.value==""){
		alert("Du glömde skriva restaurangens ort!");
		return false;
	[b]} else if (checkboxcheck(document.forms["form"],"kID") > 2){
		alert("Du får max markera 2 kategorier.");
		return false;[/b]
	}
}

Tar jag bort de två översta fetstilta ställena funkar det.

nitro2k01Medlem sedan aug. 20039 342 inlägg
#2

Varför kontrollera längden när det felet ändå upptäcks i och med kontrollen av huruvida http:// inleder denna. Längdkollen gjorde att if/else-loopen lämnades för tidigt i vissa fall. Jag rekommenderar följande kod (notera att även felmeddelandet ändrats!)

 
function checkboxcheck(obj,name){
	var nn=0;
	for(var n=0;n<obj.length;n++){
		nn+=(obj[n].type=="checkbox"&&obj[n].checked&&(!name||name==obj[n].name))?1:0;
	}
	return(nn);
}

function UpdateRest(){ 
        var elm = document.forms["form"].elements;

	if (document.form.namn.value==""){
		alert("Du glömde restaurangens namn!");
		return false;
	} else if (document.form.adress.value==""){
		alert("Du glömde skriva restaurangens adress!");
		return false;
	} else if (document.form.husnr.value==""){
		alert("Du glömde skriva restaurangens husnr!");
		return false;
	} else if (document.form.tel.value==""){
		alert("Du glömde skriva restaurangens telefonnummer!");
		return false;
	} else if (!/^http:\/\//.test(elm["www"].value)) {
		alert("Hemsideadressen måste fyllas i samt börja med [url]http://[/url]");
		return false;
	} else if (document.form.postnr.value==""){
		alert("Du glömde skriva restaurangens postnr!");
		return false;
	} else if (document.form.ort.value==""){
		alert("Du glömde skriva restaurangens ort!");
		return false;
	} else if (checkboxcheck(document.forms["form"],"kID") > 2){
		alert("Du får max markera 2 kategorier.");
		return false;
	}
	// Tag bort nästa rad. Den finns där endast i testsyften
	alert("ok");
}
AsaMedlem sedan dec. 20011 860 inlägg
#3

Hemsideadress måste ej fyllas i! OM den fylls i måste det börja med http://

nitro2k01Medlem sedan aug. 20039 342 inlägg
#4

Då ska den kollen inte finnas i else if-kedjan för att undvika att lämna kollen för tidigt. Kod som följer:

 
function checkboxcheck(obj,name){
	var nn=0;
	for(var n=0;n<obj.length;n++){
		nn+=(obj[n].type=="checkbox"&&obj[n].checked&&(!name||name==obj[n].name))?1:0;
	}
	return(nn);
}

function UpdateRest(){ 
        var elm = document.forms["form"].elements;

	if (document.form.namn.value==""){
		alert("Du glömde restaurangens namn!");
		return false;
	} else if (document.form.adress.value==""){
		alert("Du glömde skriva restaurangens adress!");
		return false;
	} else if (document.form.husnr.value==""){
		alert("Du glömde skriva restaurangens husnr!");
		return false;
	} else if (document.form.tel.value==""){
		alert("Du glömde skriva restaurangens telefonnummer!");
		return false;
	} else if (document.form.postnr.value==""){
		alert("Du glömde skriva restaurangens postnr!");
		return false;
	} else if (document.form.ort.value==""){
		alert("Du glömde skriva restaurangens ort!");
		return false;
	} else if (checkboxcheck(document.forms["form"],"kID") > 2){
		alert("Du får max markera 2 kategorier.");
		return false;
	}
	if (!document.form.[url]www.value==[/url]"" && !/^http:\/\//.test(elm["www"].value)) {
		alert("Hemsideadressen måste börja med [url]http://[/url]");
		return false;
	}

	// Tag bort nästa rad. Den finns där endast i testsyften
	alert("ok");
}
JojoxxMedlem sedan juni 20004 308 inlägg
#5

Asa, du har inget annat (html)-fel på sidan? Jag provade din kod och den verkar fungera ok (ditt exempel).

Hurvida du returnerar false som i ditt exempel eller nitro's spelar ingen roll. Det blir inte mer false bara för att det är fler saker som är fel :) Det man skulle kunna göra är att summera alla saker som är fel istället för att returnera false så fort man hittar något. På så vis kan man tala om för användaren alla saker som inte stämmer istället för att bara rapportera ett och ett.

nitro2k01Medlem sedan aug. 20039 342 inlägg
#6

Nja jojoxx, koden orsakar inga körfel, om formens element finns. Däremot orsakar koden(den ursprungliga) ett logiskt fel, nämligen att den inte upptäcker inte skrivit i postnr, ort eller om denne markerat fler än 2 kategorier (Dock bara om användaren skrivit in en korrekt www). Men för att jag är så snäll :) så har jag skrivit i ordning en kod som kollar varje element för sig.

 
function UpdateRest(){ 
        var elm = document.forms["form"].elements;
	var errNums = 0;
	var errors = "Följande fel upptäcktes: \n\n";
	if (document.form.namn.value==""){
		errors += "Du glömde restaurangens namn!" + "\n";
		errNums ++;
	} 
	if (document.form.adress.value==""){
		errors += "Du glömde skriva restaurangens adress!" + "\n";
		errNums ++;
	} 
	if (document.form.husnr.value==""){
		errors += "Du glömde skriva restaurangens husnr!" + "\n";
		errNums ++;
	}
	if (document.form.tel.value==""){
		errors += "Du glömde skriva restaurangens telefonnummer!" + "\n";
		errNums ++;
	} 
	if (document.form.postnr.value==""){
		errors += "Du glömde skriva restaurangens postnr!" + "\n";
		errNums ++;
	} 
	if (document.form.ort.value==""){
		errors += "Du glömde skriva restaurangens ort!" + "\n";
		errNums ++;
	} 
	if (checkboxcheck(document.forms["form"],"kID") > 2){
		errors += "Du får max markera 2 kategorier." + "\n";
		errNums ++;
	}
	if (!document.form.[url]www.value==[/url]"" && (!/^http:\/\//.test(elm["www"].value))) {
		errors += "Hemsideadressen måste börja med [url]http://[/url]" + "\n";
		errNums ++;
	}

	if (errNums > 0)
		alert (errors);
		return false;
	else
		// Tag bort nästa rad. Den finns där endast i testsyften
		alert("ok");

}
JojoxxMedlem sedan juni 20004 308 inlägg
#7

Däremot orsakar koden(den ursprungliga) ett logiskt fel

Har Asa redigerat sitt inlägg eller syftar du på något annat? Denna kodsnutt släpper inte igenom ett icke ifyllt postnummerfält.

AsaMedlem sedan dec. 20011 860 inlägg
#8

Jojoxx skrev:

Asa, du har inget annat (html)-fel på sidan? Jag provade din kod och den verkar fungera ok (ditt exempel).

Hurvida du returnerar false som i ditt exempel eller nitro's spelar ingen roll. Det blir inte mer false bara för att det är fler saker som är fel :) Det man skulle kunna göra är att summera alla saker som är fel istället för att returnera false så fort man hittar något. På så vis kan man tala om för användaren alla saker som inte stämmer istället för att bara rapportera ett och ett.

I det exemplet finns ju inte checkboxarna med. Det ska finnas flera såna och 2 får max fyllas i. De heter lika med olika värden.

JojoxxMedlem sedan juni 20004 308 inlägg
#9

Ja ursäkta. De hade jag missat. Men det fungerar fortfarande bra.

AsaMedlem sedan dec. 20011 860 inlägg
#10

Hmm, nu blir jag fundersam! Ska kolla lite mer i min kod och återkommer. Förmodligen blir det ikväll för jag ska iväg nu.

nitro2k01Medlem sedan aug. 20039 342 inlägg
#11

Jojoxx skrev:

Däremot orsakar koden(den ursprungliga) ett logiskt fel

Har Asa redigerat sitt inlägg eller syftar du på något annat? Denna kodsnutt släpper inte igenom ett icke ifyllt postnummerfält.

Nej däremot har jag redigerat mitt inlägg... Jag glömde nämligen att nämna detta först: Den släpper bara igenom postnr och ort om url-en är korrekt ifylld. (Pröva det!). Om man fyller i en felaktig url eller lämnar den tom fungerar koden som man förväntar sig, men som sagt inte om url är korrekt ifylld.

JojoxxMedlem sedan juni 20004 308 inlägg
#12

Ahh, det hade jag inte testat. Mitt fel.

nitro2k01Medlem sedan aug. 20039 342 inlägg
#13

Jojoxx skrev:

Ahh, det hade jag inte testat. Mitt fel.

Man måste testa allt om man ska bli av med buggarna :)

Jesper TMedlem sedan nov. 20017 144 inlägg
#14

Du använder förmodligen ASP på sidan du tar emot formuläret?!

Tips: Låt de få skriva "som de vill" i formuläret (www) och plocka bort "http://" ur strängen, så kan du enkelt sätta dit det igen innan du lägger till adressen. Eller tänker jag fel?

replace(request.form("www"),"http://","")
JojoxxMedlem sedan juni 20004 308 inlägg
#15

Nej, det är nog en bra idé. Ingen större risk att någon använder något annat protokoll än http :)

AsaMedlem sedan dec. 20011 860 inlägg
#16

Bestäm er! Vad ska jag göra nu när inte jag får igång det. Kanske jag kan skicka databas å formulär här så kan ni ladda ner å ändra å sen ladda upp?

AsaMedlem sedan dec. 20011 860 inlägg
#17

Om jag lämnar www tomt säger den till om kategorierna men inte om jag fyller i det.

AsaMedlem sedan dec. 20011 860 inlägg
#18

Hmm, hade ju glömt en grej! Tror det funkar nu! Men jag kollade ju det förrut att det var rätt.....

Funkade...

dectgapMedlem sedan sep. 20021 655 inlägg
#19

Asa skrev:

Bestäm er!

Det är bra att du är bestämd!
Varför nöja sig med att folk hjälper dig och diskuterar bästa sätt att lösa ditt problem?

JojoxxMedlem sedan juni 20004 308 inlägg
#20

Du kan ta vilket du vill, antingen ditt exempel som jag modifierat eller Nitros exempel. Båda fungerar. Beträffande Jespers tips så kan du ta det eller inte (det är ett bra tips).

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