Avatar billede sbk-eraser Nybegynder
09. januar 2009 - 17:46 Der er 15 kommentarer

Forhindre ENTER i at submitte form

Hej

Jeg har en form som bruges i en ajaxsammenhæng, og der vil jeg gerne forhindre at formen submittes når man trykker enter i et textfield.
Jeg har søgt og fundet en del funktioner, og jeg kan godt forhindre enter all-in-all, men jeg vil have enter til at udføre anden funktion end submit.

Jeg kan f.eks. forhindre submit med dette:

document.onkeypress = function(e)
{
e = e || window.event;
if (typeof e != 'undefined')
{
var tgt = e.target || e.srcElement;
if (typeof tgt != 'undefined' && /input/i.test(tgt.nodeName))
return (typeof e.keyCode != 'undefined') ? e.keyCode != 13 : true;
}
}

Den skal så udføre en funktion, og det skal kun gælde for et enkelt textfield

Ville være glad hvis der var nogen der kunne komme med foreslag.
Avatar billede erikjacobsen Ekspert
09. januar 2009 - 17:49 #1
Du kan ikke bare:

  <form onsubmit="blabla();return false">
    <input type="text" ....>
  </form>

?
Avatar billede olebole Juniormester
11. januar 2009 - 15:10 #2
<ole>

Når du bruger Ajax har du ikke brug for en form, så den sletter du vel bare  =)

/mvh
</bole>
Avatar billede sbk-eraser Nybegynder
11. januar 2009 - 21:01 #3
Det er en rimelig stor formular, hvor et par af felterne har autocomplete, det er det dette skal anvendes til.
Jeg vil gerne kunne submitte formen når den er udfyldt :)
Avatar billede olebole Juniormester
11. januar 2009 - 22:06 #4
<script type="text/javascript">
var bCanSendForm = false;
</script>

  <form onsubmit="return bCanSendForm">
    ... ... ... ... ... ...
    ... ... ... ... ... ...
    ... ... ... ... ... ...
    <button type="submit" onclick="bCanSendForm=true">Send</button>
  </form>
Avatar billede olebole Juniormester
11. januar 2009 - 22:08 #5
Derudover bør du nok gøre som Google og tjekke hvert sekund ... ikke hvergang et tegn skrives. Det begrænser det overarbejde en hurtigskriver let sender serveren ud i  ;o)
Avatar billede sbk-eraser Nybegynder
12. januar 2009 - 08:57 #6
Takker for svarene.

Desværre fungerer de ikke rigtigt. erikjacobsens vil ikke submitte overhovedet.
Løsningen fra olebole fungerer submitter stadig når man trykker enter i et textinput.

Ang. belastning af serveren, så bliver det ikke et issue her, da formen kun skal bruges et par gange om dagen.
Avatar billede erikjacobsen Ekspert
12. januar 2009 - 09:08 #7
"erikjacobsens vil ikke submitte overhovedet." - det siger du jo den ikke skal.

Kan du komme med et lille eksempel med kode, på hvad du skal have til at virke?
Avatar billede sbk-eraser Nybegynder
12. januar 2009 - 10:22 #8
Sorry erik, kan godt se det ikke var så godt beskrevet.

Jeg har en formular med rigtig mange felter, nogle af disse felter har jeg lavet autocomplete på.
Jeg kunne godt tænke mig at man skal kunne vælge et autocompleteresultat ved trykke enter.
Problemet er at når jeg trykker enter, submittes formen.
Formen skal altså ikke submittes når man trykker enter, men der skal senere være mulighed for at submitte hele formen ved at klikke på submit knappen.

Hele autocompletekoden fylder en del, så poster et minimalt eksempel her.
Vil bare have den til at alerte "wee" når jeg trykker enter, formen skal ikke submittes før man klikker på submit.

<script type="text/css">
function doStuff(e){
    if (window.event){
        keycode = window.event.keyCode;
    }
    else if (e){
        keycode = e.which;
    }
    if (keycode == 13){
        alert("wee");
    }
}
</script>

<form action="process.php" method="post">
<input type="text" name="autocomplete" id="autocomplete" onkeyup="doStuff(event);" />
<input type="text" name="alm_text" id="alm_text" />
<input type="submit" />
</form>
Avatar billede erikjacobsen Ekspert
12. januar 2009 - 10:28 #9
Så kan du bruge oleboles løsning - den submitter ikke, hvis du trykker Enter i et tekstfelt.
Avatar billede sbk-eraser Nybegynder
12. januar 2009 - 10:47 #10
Når jeg prøver med oleboles eksempel, får jeg min alert, men derefter submittes formen.

Gør jeg noget forkert?
Her er den komplette test:

<html>
<head>
<script type="text/javascript">
var bCanSendForm = false;
function doStuff(e){
    if (window.event){
        keycode = window.event.keyCode;
    }
    else if (e){
        keycode = e.which;
    }
    if (keycode == 13){
        alert("wee");
    }
}
</script>
</head>
<body>
<form onsubmit="return bCanSendForm" action="process.php" method="post">
<input type="text" name="autocomplete" id="autocomplete" onkeyup="doStuff(event);" />
<input type="text" name="alm_text" id="alm_text" />
<button type="submit" onclick="bCanSendForm=true">Send</button>
</form>
</body>
</html>
Avatar billede erikjacobsen Ekspert
12. januar 2009 - 10:53 #11
Nå, ja, hvis du har mere end eet tekst-felt.

Et hurtigt hack

<button onclick="bCanSendForm=true;this.form.submit()">Send</button>
Avatar billede sbk-eraser Nybegynder
12. januar 2009 - 11:11 #12
erikjacobsen , Det fixede problemet i Internet Explorer, men formen submittes stadig i Firefox 3
Avatar billede erikjacobsen Ekspert
12. januar 2009 - 11:19 #13
Ja, det var jo bare et hurtigt hack ;)  Så er det vel nemmest at smide <button> udenfor din form, og fra den sige submit til formen. Problemet er eksistensen af en submit-agtig tingest i formen.
Avatar billede sbk-eraser Nybegynder
12. januar 2009 - 11:41 #14
Ah ja, den mulighed havde jeg slet ikke overvejet.
Det fungerer jo som det skal når jeg fjerner submitknappen fra samme form :)
Smid et svar, så falder der point af :)
Avatar billede erikjacobsen Ekspert
12. januar 2009 - 11:50 #15
Nej tak. Jeg samler slet ikke på 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