Hjälp! Vad gör följande kod?
<html>
<body>
<script type="text/javascript" >
var x =document.getElementById("registration_form");
for (var i=0; i<x.length;i++)
{
if (x==null || x=="")
{
alert("Fields must be filled out");
}
}
</script>
</body>
</html>
Med den HTML markupen så kommer koden krashar (då den saknar ett element med ett id registration_form) även om du har ett element med ett id så kommer length vara undefined och därför kommer inte for-loopen heller göra något.
För att förtydliga lite vad voigtann1 sa.
Det är inte garanterat att koden i nuvarande skick körs innan sidan har laddat färdigt. Alltså kan det hända att du får ett tomt svar från document.getElementById eftersom du letar efter ett element som inte finns i minne ännu.
Ett sätt att lösa detta på är window.onload:
window.onload=function(){
// Placera din kod här
}
Då körs koden när sidan laddas. Dock vill du nog köra koden innan formuläret skickas iväg. Då får du göra på annat vis.
Vad gäller invändning nr 2 så har du faktiskt fel, voigtann. I princip är det rätt tänkt att något som returneras med getElementById bara är ett element som det av naturliga skäl inte går att loopa genom. Dock gäller ett specialfall med formulär, där man direkt kan använda objektet som array, vilket då motsvarar form.elements, dvs formulärets element. Dock är koden i TS' inlägg så klart ändå felaktig. För att koden ska validera ett formulär korrekt krävs det några ändringar.
utan HTML markup då?
Tack voigtann1, jag undrar då om jag tar bort hTML markup, menar du då att det skulle funka bättre? Alltså, det finns en html fil med ett formulär som har id "registration_form"
<script type="text/javascript" >
var x =document.getElementById("registration_form");
for (var i=0; i<x.length;i++)
{
if (x==null || x=="")
{
alert("Fields must be filled out");
}
}
</script>
@nitro2k01, ok om nu elementet var ett form, men koden fungera inte med den markupen då han har hela html dokumentet i exemplet.
@swingman du få en kollektion av dina input som nitro2k01 skriver, men när du loopar igenom den så kolla du mot en kollektion, vi vet ju att den inte är null och vi vet ju att det är en array då kan den inte vara en tom sträng.
var x =document.getElementById("registration_form");
for (var i=0; i<x.length;i++) {
var input = x[i];
if (input.value === ""){
alert("Fields must be filled out");
}
}
kommer ge dig en alert box för varje fält (dock berättar den inte vilket fält) som är tom.
Tack alla tips! Som ni säkert ha förstått så är jag ganska ny med Javascript men...
Jag testade din kod, voigtann1 men det funkade inte för mig. Det kan vara att de andra filerna ligger eller har fel. Hur som helst så borde följande kod fungera men den gör inte det. Håller ni med?
<script type="text/javascript" >
var x=document.forms["registration_form"]["field_firstname"].value;
if (x==null || x=="")
{
alert("First name must be filled out");
return false;
}
}
</script>
return false skall du ju inte köra, då det du har postat nu är inte en metod
sen har du en } för mycket i din kod.
http://jsfiddle.net/TE2U7/ fungera för mig