Avatar billede starter Praktikant
30. juli 2004 - 20:09 Der er 29 kommentarer og
1 løsning

Tvinge brugeren til at udfylde et felt.

Jeg skal bruge et lille script, som tvinger brugeren til at udfylde feltet "Navn". Jeg har nedenstående script, men det virker bare ikke. Er der nogen som kan fortælle mig hvorfor?

<script type="text/javascript">
function valider(f){
  if(f.navn.value==""){
    alert('Udfyld venligst feltet "Navn".');
    f.navn.focus();
    return false;
  }
}
</script>
Avatar billede squashguy Nybegynder
30. juli 2004 - 20:26 #1
<form onsubmit="return valider(this)">

burde virke
Avatar billede starter Praktikant
30. juli 2004 - 20:32 #2
Måske er jeg ikke særlig kvik - hvilket er meget sansynligt :) men jeg kan ikke få det til at virke. Jeg formoder at du mener det skal se således ud:

<script type="text/javascript">
<form onsubmit="return valider(this)">
  if(f.navn.value==""){
    alert('Udfyld venligst feltet "Navn".');
    f.navn.focus();
    return false;
  }
}
</script>
Avatar billede squashguy Nybegynder
30. juli 2004 - 20:34 #3
ikke helt :)

du har vel en <form> hvor du har dit inputfelt <input name="navn"> ?

<script type="text/javascript">
function valider(f){
  if(f.navn.value==""){
    alert('Udfyld venligst feltet "Navn".');
    f.navn.focus();
    return false;
  }
}
</script>

<form onsubmit="return valider(this)">
<input type="text" name="navn">
<input type="submit">
</form>
Avatar billede starter Praktikant
30. juli 2004 - 20:44 #4
Ja, det er korrekt, men det virker stadig ikke. Min box ligger i en tabel og cellen ser sådan ud:
      <tr>
        <td width="16%">Navn:</td>
        <td width="84%">
<form onsubmit="return valider(this)">
<input type="text" name="navn" size="35" tabindex="18"></td>
      </tr>

og scriptet således:
<script type="text/javascript">
function valider(f){
  if(f.navn.value==""){
    alert('Udfyld venligst feltet "Navn".');
    f.navn.focus();
    return false;
  }
}
</script>
Avatar billede starter Praktikant
30. juli 2004 - 20:46 #5
Jeg skal lige bemærke, at hvis jeg tager e-mail adresse feltet med og skriver således.

<script type="text/javascript">
function valider(f){
  var t = "\\wáàãââæåçéèêëìíîïñòóôõöøùúûüýÿ";
  var regexp = new RegExp("^["+t+"]["+t+"\\.\\-]*@["+t+"]["+t+"\\.\\-]*\\.["+t+"]{2}["+t+"]*$","i");
  if(!f.email.value.match(regexp)){
    alert('E-mail adressen "'+ f.email.value + '" er ikke en korrekt e-mail adresse, prøv venligst igen...');
    f.email.focus();
    return false;
  }
  if(f.navn.value==""){
    alert('Udfyld venligst feltet "Navn".');
    f.navn.focus();
    return false;
  }
}
</script>

så virker det......?
Avatar billede roenving Novice
31. juli 2004 - 03:06 #6
Formen skal jo ligge udenom alle felter, og desuden må man ikke dele en tabel op med et form-tag ...

-- Hvis det ikke medfører at du får det til at virke, vil jeg anbefale, at du lægger et link eller evt. kopierer hele koden !-)
Avatar billede starter Praktikant
05. august 2004 - 18:55 #7
Undskyld mange gange.... Jeg kom simpelthen væk fra det her - vejret er jo godt :-)

Her er hele koden - dog med små ændringer i adresser m.m.

<?php
//adds header and footer veriables
include 'header.php';

//if else statment to process the form
    //if sfeedback returns true
if($email != "") {
        //if the email address is correct format
    if(eregi("([[:alnum:]\.\-]+)(\@[[:alnum:]\.\-]+\.+)", $email)) {
        //inserts header
    print $head;
?>
<!-- Confirms the information you sent as feedback -->
    Hej <?php echo $navn ?>.<br><br>Nedenstående er sendt til <a href="mailto:min@mail.dk">min@mail.dk</a>.<br><br>
    Nave: <?php echo $name ?><br>
    Adresse: <?php echo $adresse ?><br>
    Post nr.: <?php echo $post_nr ?><br>
    By: <?php echo $by ?><br><br>
    E-mail: <?php echo $email ?><br><br>
    Besked: <?php echo $besked ?><br><br><br>
    <a href="kontakt.php">Retur</a>
<?php

    //sets veriables for the email to webmaster
    $subject = "Kontakt";
// Change the following line to your email address
    $sendto = "min@mail.dk";
    $header = "From: $email";
    //mail() to send the info to webmaster
mail($sendto,$subject,"Fra: $name\nAdresse: $adresse\nPost nr.: $post_nr\nBy: $by\nE-mail: $email\n\nBesked: $besked\n");

    print "";
    print "<p><left><form>
</form></left><p><p>";
    //prints footer
    print $tail;
    //exits script so the form is not put up again
    exit();
    //if address doesnt' look right error message
    } else { print"<left><font color=AC2A3C><h2>Du skal som minimum udfylde en korrekt e-mail adresse. E-mail adressen &quot;$email&quot; er IKKE en korrekt e-mail adresse, prøv igen...</h2></font></left>";
    }
}
//if the above if else statement came back false the following would be printed
//header
echo $head;
?>
<!--Change greeting if you like-->

<blockquote>

<script type="text/javascript">
function valider(f){
  var t = "\\wáàãââæåçéèêëìíîïñòóôõöøùúûüýÿ";
  var regexp = new RegExp("^["+t+"]["+t+"\\.\\-]*@["+t+"]["+t+"\\.\\-]*\\.["+t+"]{2}["+t+"]*$","i");
  if(!f.email.value.match(regexp)){
    alert('Du skal som minimum udfylde en korrekt e-mail adresse. E-mail adressen "'+ f.email.value + '" er IKKE korrekt, prøv igen...');
    f.email.focus();
    return false;
  }
  if(f.besked.value==""){
    alert('Du har ikke skrevet en besked.');
    f.besked.focus();
    return false;
  }
/*Blok slut*/
}
</script>

<form action="<?php echo $PHP_SELF ?>" method="POST" onsubmit="return valider(this);">
<table align="left" style="border-collapse: collapse" bordercolor="#111111" cellpadding="0" cellspacing="0">
<tr>
<td width="104">Navn :</td><td colspan="3" width="386">
<input type="text" name="navn" size="48" tabindex="1"></td>
<td width="386" rowspan="5" valign="top">
<b>Privat:</b><br>
Adresse<br>
Postnr. og by<br>
Tlf.: 00 00 00 00<br>
Mobil: 00 00 00 00<br>
<a href="mailto:min@mail.dk">min@mail.dk</a><p>
<b>Arbejde:<br>
</b>Tlf.: 00 00 00 00<br>
<a href="mailto:min@mail.dk">min@mail.dk</a></p>
</td></tr><tr>
<td width="104">Adresse :</td><td colspan="3" width="386">
<input type="text" name="adresse" size="48" tabindex="2"></td></tr><tr>
<td width="104">Postnr. :</td><td width="61">
<input type="text" name="post_nr" size="4" tabindex="3"></td><td width="40">
<p align="left">By :</td><td width="282">
<input type="text" name="by" size="33" tabindex="4"></td></tr><tr>
<td width="104">e-mail :</td><td colspan="3" width="386">
<input type="text" name="email" size="48" tabindex="5"></td></tr><tr>
<td valign="top" width="104">Besked :</td><td colspan="3" width="386">
<textarea name="besked" cols=48 rows="12" tabindex="6"></textarea></td></tr>

</tr><tr>
<td></td><td valign="top" width="876" colspan="5">
<input type="submit" value="Send" tabindex="7"><input type="reset" value="Reset" tabindex="8">
<i>
<b>Bemærk:</b> Beskeden sendes til xxx.</i></td></tr>

</table>

</form></blockquote>
<?php
echo $tail
?>
Avatar billede roenving Novice
06. august 2004 - 00:00 #8
<script type="text/javascript">
function valider(f){
  var t = "\\wáàãââæåçéèêëìíîïñòóôõöøùúûüýÿ";
  var regexp = new RegExp("^["+t+"]["+t+"\\.\\-]*@["+t+"]["+t+"\\.\\-]*\\.["+t+"]{2}["+t+"]*$","i");
  if(!f.email.value.match(regexp)){
    alert('Du skal som minimum udfylde en korrekt e-mail adresse. E-mail adressen "'+ f.email.value + '" er IKKE korrekt, prøv igen...');
    f.email.focus();
    return false;
  }
  if(f.besked.value==""){
    alert('Du har ikke skrevet en besked.');
    f.besked.focus();
    return false;
  }
  return true;//<-- denne linje _skal_ med ?-)
}
</script>

-- jeg har ikke præcis forstået hvorfor, men øeh ...

-- det er vel egentlig også ligegyldigt !-)

-- og så lige til en anden gang med javascript-spørgsmål: Det er smart at lægge den kode, javascripteren ser, nemlig det, som vises i browseren, så tag den fra Vis kilde !o]
Avatar billede starter Praktikant
06. august 2004 - 06:18 #9
Det jeg jo egentlig gerne vil er, at brugeren ikke nødvendigvis skal udfylde feltet e-mail men kun navn og besked....
Avatar billede roenving Novice
06. august 2004 - 15:06 #10
<script type="text/javascript">
function valider(f){
  var t = "\\wáàãââæåçéèêëìíîïñòóôõöøùúûüýÿ";
  var regexp = new RegExp("^$|^["+t+"]["+t+"\\.\\-]*@["+t+"]["+t+"\\.\\-]*\\.["+t+"]{2}["+t+"]*$","i");
  if(!f.email.value.match(regexp)){
    alert('Du skal udfylde med en korrekt e-mail adresse. E-mail adressen "'+ f.email.value + '" er IKKE korrekt, prøv igen...');
    f.email.focus();
    return false;
  }
  if(f.navn.value==""){
    alert('Du har ikke udfyldt dit navn.');
    f.navn.focus();
    return false;
  }
  if(f.besked.value==""){
    alert('Du har ikke skrevet en besked.');
    f.besked.focus();
    return false;
  }
  return true;
}
</script>

-- så accepterer den at mail-feltet er tomt, men brokker sig, hvis det ikke er en korrekt mail-adresse !-)
Avatar billede starter Praktikant
06. august 2004 - 15:45 #11
Ja, det er korrekt. Problemet er bare, at beskeden så ikke bliver sendt til modtageren :(
Avatar billede roenving Novice
06. august 2004 - 15:50 #12
Det havde jeg ikke forstået ...

Hvis du ikke vil checke e-mail-feltet fjerner du bare den blok, så kun navn og besked valideres !-)
Avatar billede starter Praktikant
06. august 2004 - 15:57 #13
Ja, det troede jeg jo også, men så går det også galt og sender ikke beskeden. Jeg troede jeg blot skulle skrive følgende (som jeg skrev i mit spørgsmål):

<script type="text/javascript">
function valider(f){
  if(f.navn.value==""){
    alert('Udfyld venligst feltet "Navn".');
    f.navn.focus();
    return false;
  }
}
</script>
Avatar billede roenving Novice
06. august 2004 - 16:07 #14
roenving 06/08-2004 00:00:42

  return true;//<-- denne linje _skal_ med ?-)
Avatar billede starter Praktikant
06. august 2004 - 16:11 #15
Nu ser det ud som nedenstående og sender stadig ikke beskeden...

<script type="text/javascript">
function valider(f){
  if(f.navn.value==""){
    alert('Du har ikke udfyldt dit navn.');
    f.navn.focus();
    return false;
  }
  if(f.besked.value==""){
    alert('Du har ikke skrevet en besked.');
    f.besked.focus();
    return false;
  }
  return true;
}
</script>
Avatar billede starter Praktikant
06. august 2004 - 16:12 #16
Jeg bliver dog tvunget til at udfylde navn og besked :-)
Avatar billede roenving Novice
06. august 2004 - 16:15 #17
Hvordan ser form-tagget ud, når du ser det i browseren ?-)
Avatar billede starter Praktikant
06. august 2004 - 16:16 #18
Øh, nu er jeg ikke med - siden ser ud som den skal, hvis det er det du mener...?
Avatar billede roenving Novice
06. august 2004 - 16:25 #19
Når du tester den, så gør du det i browseren, der f.eks. højreklikker du og vælger Vis kilde ...

-- så finder du dit form-tag, og kopierer den linje ind her !o]

Fordi der kan være noget fortolknings-et-eller-andet i dit php-script, som kan gøre, at den måske ikke opfører sig, som du (og jeg !-) forventer, er det vigtigt, at den kode vi kigger på, når det er javascript, man skal hjælpe med, er præcis den kode, som kommer i browseren ...
Avatar billede starter Praktikant
06. august 2004 - 16:27 #20
OK. Men jeg er bange for at den ser ud som før - sorry...

<script type="text/javascript">
function valider(f){
  if(f.navn.value==""){
    alert('Du har ikke udfyldt dit navn.');
    f.navn.focus();
    return false;
  }
  if(f.besked.value==""){
    alert('Du har ikke skrevet en besked.');
    f.besked.focus();
    return false;
  }
  return true;
}
</script>
Avatar billede roenving Novice
06. august 2004 - 16:53 #21
Men jeg har ikke set form-tagget, som det ser ud i browseren ...

-- det har du kun vist, som det ser ud på serveren:

<form action="<?php echo $PHP_SELF ?>" method="POST" onsubmit="return valider(this);">

Find den linje efter ovenstående anvisninger !-)
Avatar billede starter Praktikant
06. august 2004 - 16:57 #22
OK, den får du så her:

<form action="/1/2/3/kontakt.php" method="POST" onsubmit="return valider(this);">
Avatar billede roenving Novice
06. august 2004 - 17:02 #23
Forstår jeg overhovedet ikke ...

Kan du på nogen måde lægge et link ?-)
Avatar billede starter Praktikant
06. august 2004 - 17:15 #24
OK her er et link, hvor jeg dog har slettet alle adresser, da det ikke er mig selv :-)

http://www.arbjerg.net/Kontakt/kontakt.php
Avatar billede roenving Novice
06. august 2004 - 22:04 #25
Du afslutter din tabel forkert, da du har een </td> for meget ...

Kig efter dette sted, hvor du har to </tr> efter hinanden, godt nok med et par linjers mellemrum, men da det direkte er fejlagtig html-kode, vil jeg tro at det er det, som er fejlen:

<td valign="top" width="104">Besked :</td><td colspan="3" width="386">
<textarea name="besked" cols=48 rows="12" tabindex="6"></textarea></td></tr>

</tr><tr>

********************************************
En rimelig rigtig html-kode (hvis man håndkodede den, ville se sådan ud:

<html>
<head>
    <title>xxx</title>
    <link rel="stylesheet" href="fbcss.css">
<style type="text/css">
    body {
    background-image: url('Images/Bag_top.gif');
    background-repeat: no-repeat;
    background-attachment: fixed;
    background-position-y:bottom
  }
</style>
<script type="text/javascript">
function valider(f){
  if(f.navn.value==""){
    alert('Du har ikke udfyldt dit navn.');
    f.navn.focus();
    return false;
  }
  if(f.besked.value==""){
    alert('Du har ikke skrevet en besked.');
    f.besked.focus();
    return false;
  }
  return true;
}
</script>
</head>
<body leftmargin=0 topmargin=0 rightmargin=0 bottommargin=0 marginwidth=0 marginheight=0>

<table align=LEFT border=0 cellpadding=0 cellspacing=0 width="700" height="50">
    <tr>
        <td valign=top>
      <h1 align=left>Kontakt</h1></td>
    </tr>
    <tr valign=bottom>
        <td height="100%">

      <blockquote>
        <form action="/Kontakt/kontakt.php" method="POST" onsubmit="return valider(this);">
          <table align="left" style="border-collapse: collapse" bordercolor="#111111" cellpadding="0" cellspacing="0">
            <tr>
              <td width="104">Navn :</td>
              <td colspan="3" width="386">
                <input type="text" name="navn" size="48" tabindex="1"></td>
              <td width="386" rowspan="5" valign="top">
                <b>Privat:</b>
                <br>
                Adresse<br>
                post nr. By<br>
                Tlf.: 00 00 00 00<br>
                Mobil: 00 00 00 00<br>
                <a href="mailto:min@mail.dk">min@mail.dk</a>
                <p>
                  <b>Arbejde:</b><br>
                  Tlf.: 00 00 00 00<br>
                  <a href="mailto:min@mail.dk">min@mail.dk</a>
                </p></td>
            </tr>
            <tr>
              <td width="104">Adresse :</td>
              <td colspan="3" width="386">
                <input type="text" name="adresse" size="48" tabindex="2"></td>
            </tr>
            <tr>
              <td width="104">Postnr. :</td>
              <td width="61">
                <input type="text" name="post_nr" size="4" tabindex="3"></td>
              <td width="40">
                <p align="left">
                  By :
                </p></td>
              <td width="282">
                <input type="text" name="by" size="33" tabindex="4"></td>
            </tr>
          <tr>
            <td width="104">e-mail :</td>
            <td colspan="3" width="386">
              <input type="text" name="email" size="48" tabindex="5"></td>
          </tr>
          <tr>
            <td valign="top" width="104">Besked :</td>
            <td colspan="3" width="386">
              <textarea name="besked" cols=48 rows="12" tabindex="6"></textarea></td>
          </tr>
          <tr>
            <td></td>
            <td valign="top" width="876" colspan="5">
              <input type="submit" value="Send" tabindex="7">
              <input type="reset" value="Reset" tabindex="8">
              <i><b>Bemærk:</b> Beskeden sendes til xxx</i></td>
          </tr>
        </table>
      </form>
    </blockquote></td>
  </tr>
</table>

</body>
</html>

-- det hører dog med i historien, at du bruger height på et table-element, ifølge html/w3c findes der slet ikke sådan en attribut til table-tagget !-)

-- du har så heller ikke det mest grundlæggende struktur-element i en html-fil med:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">

-- som bør være de to første linjer i et output til en browser !-)

'håndkodet' betyder, at når man selv skriver koden er man nødt til at overskue den ved hjælp af indrykninger osv., når man genererer det fra et php-script, er det principielt ligegyldigt, men om muligt bør man lave øvelsen, så man kan gennemskue fejl, det er f.eks. derfor jeg fandt den overskydende </tr> ...

-- og fejlen har du faktisk hardcoded ind i html-koden ,-)
Avatar billede roenving Novice
06. august 2004 - 22:05 #26
Hov ...

Fejlen er selvfølgelig, at der een </tr> for meget !-)
Avatar billede starter Praktikant
07. august 2004 - 08:23 #27
Jeg forstår altså ikke rigtig det her... Jeg kan godt se at jeg har en </tr> for meget og har prøvet at fjerne den, men det hjælper ingenting. Meeen hvorfor virker formularen så hvis jeg sætter e-mail til at være tvungen og ikke hvis jeg fjerner den? Det har vel principielt ikke noget med tabellens opbygning at gøre?

Jeg må indrømme at jeg er lige ved at opgive det her og bare lade den f... e-mail være tvungen :-) Men omvendt kan det vel ikke være rigtig at det ikke kan lykkedes....
Avatar billede roenving Novice
07. august 2004 - 08:31 #28
Jeg prøvede lige med den kontakt-formular, du har lagt ud, og det virkede, som om den sendte ?-)
Avatar billede starter Praktikant
07. august 2004 - 08:52 #29
Beklager, men det gør den altså ikke. hvis du prøver at kigge på http://www.arbjerg.net/Kontakt/contakt.php så kan du se hvordan den ser ud når den virker - altså med tvungen e-mail udfyldelse :-)
Avatar billede starter Praktikant
31. maj 2005 - 19:18 #30
tror bare lige jeg lukker :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester