Avatar billede trp79 Nybegynder
16. februar 2006 - 17:07 Der er 16 kommentarer og
1 løsning

Kan ikke finde fejlene i min validering af et input felt.

Hejsa
Jeg har følgende kode, som burde fange hvis en bruger taster bogstaver ind i stedet for tal. Men det virker ikke... er der nogen der kan se, hvad der er galt?

    <script type="text/javascript">
        function validate(){
          var bananBeloeb = konverterTilFloat(getE('bananBeloeb').value);
          if (!testTal(bananBeloeb) || bananBeloeb < 0) {
            alert("Det indtastede beløb skal være et positivt tal!");       
            getE('bananBeloeb').focus();
            return false;
            }
          else{
            return advar(getE('indbetaler').value)
          }
        }
       
        function konverterTilFloat(inputVal) {
          var inputStr = inputVal.toString();
          if (inputStr.indexOf(",") >= 0) {
            inputStr = inputStr.replace(",", ".");
          }
          return parseFloat(inputStr);
        }
       
        function testTal(s) {
          s = trimString(s) ;
         
          if (s.indexOf(".") != s.lastIndexOf(".")) { // Are there more than one dot
            return false;
          }
       
          if (s.indexOf(",") != s.lastIndexOf(",")) { // Are there more than one comma
            return false;
          }
       
          if (s.indexOf(",") > 0 && s.indexOf(".") > 0) { // Are there both a comma and a dot
            return false;
          }
       
          for (var i = 0; i < s.length; i++) {
            if ((s.charAt(i) < "0" || s.charAt(i) > "9") && s.charAt(i) != "." && s.charAt(i) != ",") {
              return false;
            }
          }
          return true;
        }
       
        function advar(m)
        {
            if(confirm("Er du sikker på at du vil registere en indtægt betalt af "+m))
            {
            return true;
            }
            return false;
        }
       
        function getE(id)
        {
            return document.getElementById(id);
        }
    </script>

Og valideringen kaldes således:
<form action="bananIndtaegter.jsp" method="post" onsubmit="return validate()">

På forhånd tak, mvh
Torben
Avatar billede tjp Mester
17. februar 2006 - 03:36 #1
Jeg ville nok bruge regexp i stedet, fx noget a la:

function tjekTal(str){
  var re1 = /^[0-9][,.]?[0-9]*$/;
  var re2 = /^-?[0-9][,.]?[0-9]*$/;
  if (re2.test(str))
    if (re1.test(str)){
      return str+" er ok"; 
    }
    else {
      return str+" er mindre end 0";
    }
  else {
    return str+" er ikke korrekt";
  }
}
Avatar billede trp79 Nybegynder
17. februar 2006 - 08:03 #2
Hov jeg kan se jeg glemte at skrive hvad der ikke virkede :( Jeg får ikke vist min confirm (vises i advar(m)) - jeg sidder på en Mac og bruger safari/mozilla, men det skal også virke i internet explore. Jeg har nu taget dit regexp i brug i stedet for, men får altså stadig ikke min alert:

function validate(){
          var bananBeloeb = konverterTilFloat(getE('bananBeloeb').value);
          if (!tjekPosTal(bananBeloeb)) {
            alert("Det indtastede beløb skal være et positivt tal!");       
            getE('bananBeloeb').focus();
            return false;
            }
          else{
            return advar(getE('indbetaler').value)
          }
        }

        function tjekPosTal(str)
        {
          var re1 = /^[0-9][,.]?[0-9]*$/;
          var re2 = /^-?[0-9][,.]?[0-9]*$/;
          if (re2.test(str))
            if (re1.test(str)){
              return true; //er korrekt
            }
            else {
              return false;//er mindre end 0
            }
          else {
            return false; //er ikke korrekt
          }
        }
       
        function advar(m)
        {
            if(confirm("Er du sikker på at du vil registere en indtægt betalt af "+m))
            {
            return true;
            }
            return false;
        }
       
        function getE(id)
        {
            return document.getElementById(id);
        }
Avatar billede roenving Novice
17. februar 2006 - 14:39 #3
Hvorfor ikke bare:

        function validate(){
          var bananBeloeb = getE('bananBeloeb').value;
          if (!bananBeloeb.match(/^\d+([.,]\d+)$/)) {
            alert("Det indtastede beløb skal være et positivt tal!");       
            getE('bananBeloeb').focus();
            return false;
            }
          else{
            return confirm("Er du sikker på at du vil registere en indtægt betalt af " + getE('indbetaler').value));
          }
        }

-- det klarer hele baduljen (getE-funktionen skal selvfølgelig stadig være der !-)
Avatar billede roenving Novice
17. februar 2006 - 14:41 #4
Hov, der manglede lige et spørgsmålstegn:

          if (!bananBeloeb.match(/^\d+([.,]\d+)?$/)) {
Avatar billede tjp Mester
19. februar 2006 - 10:06 #5
>>trp79
Du bør nok fjerne 'konverterTilFloat' i:
var bananBeloeb = konverterTilFloat(getE('bananBeloeb').value);
Avatar billede trp79 Nybegynder
20. februar 2006 - 10:27 #6
Jeg får stadig ingen pop-up når jeg gør følgende:

    <script type="text/javascript">
        function validate(){
          var bananBeloeb = getE('bananBeloeb').value;
          if(!bananBeloeb.match(/^\d+([.,]\d+)?$/)) {
            alert("Det indtastede beløb skal være et positivt tal!");       
            getE('bananBeloeb').focus();
            return false;
            }
          else{
            return confirm("Er du sikker på at du vil registere en indtægt betalt af " + getE('indbetaler').value));
          }
        }
       
        function getE(id)
        {
            return document.getElementById(id);
        }
    </script>

Måske det skyldes jeg sidder på en Mac ? Jeg har prøvet i safari og firefox, men ingen af dem giver en pop up - funktionen bliver altså blot gennemført.
Avatar billede tjp Mester
25. februar 2006 - 02:09 #7
Bliver validate() overhovedet kaldt? Den burde jo give en pop-up uanset hvad.
Avatar billede roenving Novice
25. februar 2006 - 14:56 #8
Hrm, jeg kan heller ikke finde grunden, men der bør faktisk forkortes en anelse mere:

    <script type="text/javascript">
        function validate(){
          var bananBeloeb = getE('bananBeloeb').value;
          if(!bananBeloeb.match(/^\d+([.,]\d+)?$/)) {
            alert("Det indtastede beløb skal være et positivt tal!");       
            getE('bananBeloeb').focus();
            return false;
          }
          return confirm("Er du sikker på at du vil registere en indtægt betalt af " + getE('indbetaler').value));
        }
       
        function getE(id){
            return document.getElementById(id);
        }
    </script>
Avatar billede trp79 Nybegynder
27. februar 2006 - 10:25 #9
Det er altså lidt underligt - jeg får ingen pop-up.
Min jsp side genererer denne kildekode:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" sml:lang="da" lang="da">
  <head>
    <title>Banan Indtægt</title>
    <script type="text/javascript">
        function validate(){
          var bananBeloeb = getE('bananBeloeb').value;
          if(!bananBeloeb.match(/^\d+([.,]\d+)?$/)) {
            alert("Det indtastede beløb skal være et positivt tal!");       
            getE('bananBeloeb').focus();
            return false;
          }
          return confirm("Er du sikker på at du vil registere en indtægt betalt af " + getE('indbetaler').value));
        }
       
        function getE(id){
            return document.getElementById(id);
        }
    </script>
    <link rel="stylesheet" type="text/css"
    href="../css/common.css" media="screen" />
  </head>
  <body>
   


<div id="rightcol">
    <ul id="menu">
      <li><a href=""></a></li>
      <li><a href="/Banankasse-context-root/legaliseret/oversigt.jsp">&raquo;&nbsp;Min oversigt</a></li>
      <li><a href="/Banankasse-context-root/legaliseret/minebananer.jsp">&raquo;&nbsp;Mine bananer</a></li>
      <li><a href="/Banankasse-context-root/legaliseret/minebananIndb.jsp">&raquo;&nbsp;Mine indbetalinger</a></li>
      <li><a href="/Banankasse-context-root/legaliseret/holdmedlemmer.jsp">&raquo;&nbsp;Hold medlemmer</a></li>
      <li><a href="/Banankasse-context-root/legaliseret/holdforumkategorier.jsp">&raquo;&nbsp;Hold forums</a></li>
      <li><a href="/Banankasse-context-root/legaliseret/holdbananer.jsp">&raquo;&nbsp;Hold bananer</a></li>
      <li><a href="/Banankasse-context-root/legaliseret/holdbanantyper.jsp">&raquo;&nbsp;Hold banantyper</a></li>
      <!--<li><a href="na.jsp">&raquo;&nbsp;Hold lister</a></li>-->
      <li><a href="/Banankasse-context-root/legaliseret/tilmeld_til_hold.jsp">&raquo;&nbsp;Holdtilmelding</a></li>
      <li><a href="/Banankasse-context-root/legaliseret/rediger_bruger.jsp">&raquo;&nbsp;Mine oplysninger</a></li>
      <li><a href="/Banankasse-context-root/index.jsp?handling=log_ud">&raquo;&nbsp;Log ud</a></li>
      <!--<li><a href="templateL.jsp">&raquo;&nbsp;Template</a></li>-->
    </ul>
</div>
    <div id="banner">
  <img src="../gif/banana.gif" height="75" width="73"></img>[Banankassen]
</div>
    <div id="indhold">
      <h3 class="obs advarsel">Registrer en indtægt til medlemmer af Amager SK - Herre</h3>
     
      <form action="bananIndtaegter.jsp" method="post" onsubmit="return validate()">
      <table>
        <tr>
          <td>Beløb</td>
          <td>Indbetaler</td>
          <td>Kommentar</td>
        </tr>
        <tr>
          <td>
            <input type="HIDDEN" name="hold" value="Amager SK - Herre">
            <input type="TEXT" name="bananBeloeb" value="12"></input>
          </td>
          <td>
            <select name="indbetaler" id="indbetaler">
           
                  <option value="Torben"> Torben </option>
                  <option value="Torben2"> Torben2 </option>
                </td>
             
          <td>
            <input type="TEXT" name="kommentar" value="Betaling var i banankassen besiddelse den " maxlength="60" size="45"></input>
          </td>
        </tr>
        <tr>
          <td colspan="4">Vær opmærksom på, at det kan tager lidt tid at registrere indbetalingen</td>
        </tr>
      </table>
        <input type="SUBMIT" name="handling" value="registrer_indbetaling">
      </form>
     
      <br/>
      <h3 class="obs advarsel">
      Der blev succesfuldt registreret en indbetaling på kr.12.0 på Torben
      </h3>
    </div>
  </body>
</html>

Nogen der har nogle ideer?
Avatar billede trp79 Nybegynder
27. februar 2006 - 15:53 #10
jeg får en js fejl om at den mangler ; Men det kan jeg da ikke lige se?
Avatar billede trp79 Nybegynder
27. februar 2006 - 16:40 #11
Arh, der var en slut parantes for meget i confirm :)

Tak for hjælpen, det virker bare som det skal nu.

Er i ikke venlige at smide et svar hver især...
Avatar billede tjp Mester
27. februar 2006 - 21:36 #12
Velbekomme... ;-)
Avatar billede roenving Novice
27. februar 2006 - 21:49 #13
>>tjp

-- den skal du vist prøve 'en gång mer' !-)

Velbekomme '-)
Avatar billede trp79 Nybegynder
01. marts 2006 - 09:29 #14
tjp vil du prøve at smide et svar igen....
Avatar billede roenving Novice
25. marts 2006 - 15:12 #15
;O)
Avatar billede trp79 Nybegynder
27. marts 2006 - 20:03 #16
time out tjp....
Avatar billede roenving Novice
29. marts 2006 - 18:30 #17
Tak for point ;~}
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