Avatar billede cdull Nybegynder
13. oktober 2005 - 11:29 Der er 19 kommentarer og
1 løsning

Ikke vise at man skriver til tekstboks ved keypress

jeg har lavet en slags validering.
Når jeg trykker på en key i et tekstfelt checker den om det er tilladt. er det ikke sletter den det igen fra feltet.

Men brugeren ser at der bliver indtastet og slettet en char igen, hvordan undgår jeg dette?
Avatar billede horsmark Nybegynder
13. oktober 2005 - 11:39 #1
hm det er en uheldig fremgangsmåde... dette er bedre

1. fortælle brugeren hvilke tegn der er tilladt
2. hvis brugeren skriver ikke tilladte tegn får han en besked om dette
3. først når alle felter er valide kan brugeren submitte formen

Kig evt. på følgende formular jeg har bygget:
http://privat.tdc.dk/internet/bredbaand/bestil/
Avatar billede softspot Forsker
13. oktober 2005 - 11:43 #2
Du skal reagere på onkeydown-, onkeypress- eller onkeyup-events og så sortere de ugyldige tagn fra inden de når ind i feltet. event-objektet har et par egenskaber hvorfra du kan læse hvilken taste der er trykket (i form af tal) og den skal du ind og kigge på. Vær dog opmærksom på at du skal checke på en kombination af keyCode og shiftKey, altKey og ctrlKey for at finde ud af hvilket tegn det svarer til...
Avatar billede cdull Nybegynder
13. oktober 2005 - 11:43 #3
Ja ok. Men nu er det sådan at det ikke nødvendigvis er med tilladte chars. Bare et eksempel. Bruger det til samlet længde på flere felter.
Det skal bare ikke ses for brugeren at feltet lige bliver skrabet men at han bare ikke kan indtaste flere værdier.
Avatar billede softspot Forsker
13. oktober 2005 - 11:55 #4
Jeg vil stadig anbefale f.eks. onkeydown-eventet. Du får bare ikke brug for keyCode, men skal i stedet summere længden af en række felter og returnere false hvis længden er nået...
Avatar billede cdull Nybegynder
13. oktober 2005 - 12:11 #5
har du evt et eksempel på det?
Avatar billede softspot Forsker
13. oktober 2005 - 12:22 #6
Jeg kunne forestille mig noget i stil med dette:


<script type="text/javascript">
var MAX_ALLOWED_LENGTH = 300;
function validate(obj) {
  if(obj) {
    var iLen = obj.form.t1.value.length;
    iLen += obj.form.t2.value.length;
    iLen += obj.form.t3.value.length;
    iLen += obj.form.t4.value.length;
    if(iLen > MAX_ALLOWED_LENGTH)
      return false;
  }
  return true;
}
</script>


<form>
  <input type="text" name="t1" onkeydown="validate(this)"><br>
  <input type="text" name="t2" onkeydown="validate(this)"><br>
  <input type="text" name="t3" onkeydown="validate(this)"><br>
  <input type="text" name="t4" onkeydown="validate(this)"><br>
</script>
Avatar billede cdull Nybegynder
13. oktober 2005 - 12:42 #7
det ser ikke ud til at den fanger obj.
har prøvet noget i denne stil hvor btn er navnet på den tekstboks der sendes med.

function Keypress2(btn)
            {
           
                if(btn)
                {
                    var len = document.getElementById(btn).value.length;
                    if(len > 10)
                    return false;       
                }
                return true;
            }
Avatar billede cdull Nybegynder
13. oktober 2005 - 12:50 #8
hvad er det du gør ved den første if? if(obj)
Avatar billede softspot Forsker
13. oktober 2005 - 12:51 #9
checker om objektet er defineret, altså om der er noget i objektet...
Avatar billede cdull Nybegynder
13. oktober 2005 - 12:53 #10
ok.
Men det funker slet ikke, jeg kan bare blive ved med at skrive tegn.
Intet sker.
Avatar billede softspot Forsker
13. oktober 2005 - 13:10 #11
Jamen, det går jo ikke... :)

Prøv dette i stedet:

<script type="text/javascript">
var MAX_ALLOWED_LENGTH = 30;
function validate(obj) {
  if(obj) {
    var iLen = obj.form.t1.value.length;
    iLen += obj.form.t2.value.length;
    iLen += obj.form.t3.value.length;
    iLen += obj.form.t4.value.length;
    if(iLen > MAX_ALLOWED_LENGTH)
      return false;
  }
  return true;
}
</script>


<form>
  <input type="text" name="t1" onkeydown="return validate(this)"><br>
  <input type="text" name="t2" onkeydown="return validate(this)"><br>
  <input type="text" name="t3" onkeydown="return validate(this)"><br>
  <input type="text" name="t4" onkeydown="return validate(this)"><br>
</form>
Avatar billede cdull Nybegynder
13. oktober 2005 - 13:40 #12
Det virker straks meget bedre.
Tak for hjælpen.

Men hey hvordan får jeg nu slet knappen til at virke?
For jeg kan indtaste det max antal tegn og det er også fint nok.
Men så kan jeg bare ikke slette dem igen, skal jeg nu til at checke på backspace?
Avatar billede cdull Nybegynder
13. oktober 2005 - 13:41 #13
Tror det bar return funktionen() der gjorde det.
Avatar billede softspot Forsker
13. oktober 2005 - 13:43 #14
Ja, return her:

onkeydown="return validate(this)"

ellers har den return fra funktionen ikke megen effekt :)
Avatar billede cdull Nybegynder
13. oktober 2005 - 13:44 #15
Ja det er det.

Men altså har stadig problem med backspace.
Avatar billede softspot Forsker
13. oktober 2005 - 13:50 #16
Ja, i realiteten skal du tillade alle kontroltaster som home, end, pil højre og - venstre, backspace osv. selvom max-længden er nået...
Avatar billede cdull Nybegynder
13. oktober 2005 - 13:56 #17
ahh skidt hehe :P
Nåh men det må jeg så lige finde ud af.
Anyways tak for hjælpen.

kan være jeg opretter et andet spørgsmål om lidt.
Avatar billede cdull Nybegynder
13. oktober 2005 - 13:57 #18
softspot...Smid lige et svar
Avatar billede softspot Forsker
13. oktober 2005 - 14:22 #19
Prøv dette (om ikke andet så brug det som udgangspunkt for hvordan du kan checke for kontroltasterne):

<script type="text/javascript">
var MAX_ALLOWED_LENGTH = 30;
function validate(obj) {
  if(obj) {
    var kc = event.keyCode;  // DETTE FUNGERER GIVETVIS KUN IE!!
   
    var iLen = obj.form.t1.value.length;
    iLen += obj.form.t2.value.length;
    iLen += obj.form.t3.value.length;
    iLen += obj.form.t4.value.length;
    if(iLen > MAX_ALLOWED_LENGTH) {
      var allowedCodes = "8,35,36,37,38,39,40,41,42,43,44,45,46";
      if((","+allowedCodes+",").indexOf(kc.toString()) == -1)
        return false;
    }
  }
  return true;
}
</script>


<form>
  <input type="text" name="t1" onkeydown="return validate(this)"><br>
  <input type="text" name="t2" onkeydown="return validate(this)"><br>
  <input type="text" name="t3" onkeydown="return validate(this)"><br>
  <input type="text" name="t4" onkeydown="return validate(this)"><br>
</form>


Det fungerer som indikeret kun i IE, da det aktuelle event vist nok ikke findes på den måde i FF, Mozilla osv. Men det kan være der er en eller anden som kan fortælle dig det...
Avatar billede softspot Forsker
14. oktober 2005 - 11:50 #20
Tak for point :)

Hvis det skal fungere i FF, så skal du åbenbart reagere på onkeypress i stedet for onkeydown - og det er altså det forslag fra kommentaren 13/10-2005 13:10:44.
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