AsaMedlem sedan dec. 20011 860 inlägg 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.
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 Hemsideadress måste ej fyllas i! OM den fylls i måste det börja med http://
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 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.
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
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
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 Ja ursäkta. De hade jag missat. Men det fungerar fortfarande bra.
AsaMedlem sedan dec. 20011 860 inlägg 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.
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 Ahh, det hade jag inte testat. Mitt fel.
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 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 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 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 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 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
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 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).