Wann löst Enter das Formular aus?

Hallo!

Ich bin dabei, ein naja einigermaßen umfangreiches Formular zu erstellen, wo der Benutzer aber (durch Macht der Gewohnheit, ist gefordert, etc…) mit der Enter-Taste Eingaben bestätigen können soll.
Im aktuellen Fall hab ich lediglich eine Liste (…)
ein Input-Feld und zwei submit-Buttons. Also noch nicht sooo viel.
Jetzt soll der Benutzer halt Enter drücken können, ich kontrolliere, ob die Eingabe Sinn macht und löse dann entsprechend das Formular aus oder eben nicht. Tja, und genau das macht er nicht bzw. macht er auf jeden Fall. Er führt meine Funktion zwar brav aus, aber er löst gleichzeitig in jedem Fall auch das Formular schon aus.
Nur wie kann ich das verhindern?
Ach ja, das passiert sowohl mit dem IE5, dem NC4.7, also auch dem NC6.2.

Wäre toll, wenn mir da jemand helfen könnte.

Gruß,

Knud

Hallo!

Guck mal hier

http://www.wer-weiss-was.de/cgi-bin/forum/showarticl…

HTH
Patrick

Hallo!

hab ich mir angeschaut. Hilft mir aber nicht wirklich weiter.
Hab mein submit aber dann extra mal so aufgebaut:

wobei die Funktion check() nichts anderes macht als false zurückzugeben:
function check() {
return false;
}

Das Ergebnis war leider immer noch das Gleiche: Meine Alert-Box wird gezeigt (heisst, meine Funktion wird ausgeführt, die ich mit der Enter-Taste verbunden habe), es wird aber immer noch gleichzeitig das Formular beendet und die unter action angegebene Funktion ausgeführt.

Hat jemand noch ne Idee?

Gruß,

Knud

Hi!

Vielleicht noch als Ergänzung:

Hab jetzt auch mal die Action rausgenommen. Trotzdem wird beim Drücken der Enter-Taste das Formular beendet und die Seite erneut
in einem neuen Fenster geöffnet. (Das liegt ja am target)

Aber warum, um himmelswillen, beendet er bloß schon das Formular?

Gruß,

Knud

Importante!

Gruss
Patrick

Hi!

Okay, jetzt wird das Formular beim Klicken auf den Submit-Button nur dann ausgeführt, wenn check() true zurückgibt.
Wenn ich es jetzt auch noch dann hinbekommen würde, wenn die Enter-Taste gedrückt wird…das Formular auch nicht automatisch abgeschickt wird.
Ich frage die Enter-Taste ab:
document.onkeydown = TasteGedrueckt;
document.captureEvents(Event.KEYDOWN);
(jetzt mal nur für den lieben Netsie)

Und ich möchte halt, dass mit dem Drücken der Enter-Taste NUR meine Funktion aufgerufen wird, sonst nichts! Das war und ist mein ursächliches Problem.

Auch da ne Lösung? Wäre echt toll!

Gruß,

Knud

Vielleicht ist es ja sinnnvoll, hier das komplette Script:

Geräteauswahl Ergoline Avantgarde

var Netscape = 0;
var xfield = 0;

if(navigator.appName == „Netscape“) Netscape = 1;

function TasteGedrueckt(Ereignis) {
if (Netscape == 1) {
// prüfen auf Enter-Taste und ob im Suchfeld, ob nur 1 in Liste, dann ausführen
ntaste = Ereignis.which;
if (ntaste == 13 && xfield == 1) {
if (document.main.Geraet.length == 1) {
// Wert aus Liste holen und ausführen
alert(„NC sucks!“);
return false;
}
}
}
}

if (Netscape == 1) {
document.onkeydown = TasteGedrueckt;
document.captureEvents(Event.KEYDOWN);
}

function klicked() {
// Doppelklick in der Auswahl (nur IE und NC 6.x)
alert(„Doppelklick in der Liste“);
}

function suche() {
// eingegebener Suchtext in Großbuchstaben
suchtext = document.main.suchfeld.value.toUpperCase();
if (suchtext != „“) {
// text im kompletten Array suchen und Liste aktualisieren
fillSelectFromArrayFULL(document.main.Geraet,a_suche,suchtext)
} else {
// alte (gesicherte) Liste zurückspielen
j = 0;
for (i = 0; i < a_suche.length; i=i+2) {
document.main.Geraet.options[j] = new Option(a_suche[i]);
document.main.Geraet.options[j].value = a_suche[i+1];
j++;
}
}
}

function fillSelectFromArrayFULL(selectCtrl, itemArray, suchtext) {

// Liste löschen
for (i = selectCtrl.options.length; i >= 0; i–) {
selectCtrl.options[i] = null;
}

// neue Einträge hinzufügen
j = 0;
found = false;
for (i = 0; i < itemArray.length; i=i+2) {
stext = itemArray[i].toUpperCase();
if (stext.indexOf(suchtext)>=0){ //gefunden --> Eintrag wieder dazu
found = true;
selectCtrl.options[j] = new Option(itemArray[i]);
selectCtrl.options[j].value = itemArray[i+1];
j++;
}
}
if (found == false) { //nichts gefunden --> wieder Original zurückspielen
j = 0;
for (i = 0; i < itemArray.length; i=i+2) {
selectCtrl.options[j] = new Option(itemArray[i]);
selectCtrl.options[j].value = itemArray[i+1];
j++;
}
}

// ersten Eintrag selektieren
// selectCtrl.options[0].selected = true;
}

var a_suche;
function init() {
a_suche = new Array();
if (document.main) {
// Liste sichern
for(i=0;i<document.main.Geraet.length;++i) {
if (Netscape == 1) {
nelement = a_suche.push(document.main.Geraet.options[i].text);
nelement = a_suche.push(document.main.Geraet.options[i].value);
} else {
a_suche[a_suche.length] = document.main.Geraet.options[i].text;
a_suche[a_suche.length] = document.main.Geraet.options[i].value;
}
}
}
}

{
ntaste = window.event.keyCode;
if (ntaste == 13 && xfield == 1) {
if (document.main.Geraet.length == 1) {
// Wert aus Liste holen und ausführen
alert(„IE sucks!“);
return false;
}
}
}

Ergoline Avantgarde auswählen

Gerätetyp

52111000 ERGOLINE 550 AVANTGARDE SUPER POWER R AUGE ROT

52111100 ERGOLINE 550 AVANTGARDE SUPER POWER R AUGE ROT KLIMA

52116000 ERGOLINE 550 AVANTGARDE SUPER POWER SR AUGE ROT

52116100 ERGOLINE 550 AVANTGARDE SUPER POWER SR AUGE ROT KLIMA

52121000 ERGOLINE 550 AVANTGARDE SUPER POWER R AUGE BLAU

52121100 ERGOLINE 550 AVANTGARDE SUPER POWER R AUGE BLAU KLIMA

52126000 ERGOLINE 550 AVANTGARDE SUPER POWER SR AUGE BLAU

52126100 ERGOLINE 550 AVANTGARDE SUPER POWER SR AUGE BLAU KLIMA

52211000 ERGOLINE 600 AVANTGARDE SUPER POWER R AUGE ROT

52211100 ERGOLINE 600 AVANTGARDE SUPER POWER R AUGE ROT KLIMA

52215000 ERGOLINE 600 AVANTGARDE TURBO POWER R AUGE ROT

52215100 ERGOLINE 600 AVANTGARDE TURBO POWER R AUGE ROT KLIMA

52216000 ERGOLINE 600 AVANTGARDE SUPER POWER SR AUGE ROT

52216100 ERGOLINE 600 AVANTGARDE SUPER POWER SR AUGE ROT KLIMA

52217000 ERGOLINE 600 AVANTGARDE TURBO POWER SR AUGE ROT

52217100 ERGOLINE 600 AVANTGARDE TURBO POWER SR AUGE ROT KLIMA

52221000 ERGOLINE 600 AVANTGARDE SUPER POWER R AUGE BLAU

52221100 ERGOLINE 600 AVANTGARDE SUPER POWER R AUGE BLAU KLIMA

52225000 ERGOLINE 600 AVANTGARDE TURBO POWER R AUGE BLAU

52225100 ERGOLINE 600 AVANTGARDE TURBO POWER R AUGE BLAU KLIMA

52226000 ERGOLINE 600 AVANTGARDE SUPER POWER SR AUGE BLAU

52226100 ERGOLINE 600 AVANTGARDE SUPER POWER SR AUGE BLAU KLIMA

52227000 ERGOLINE 600 AVANTGARDE TURBO POWER SR AUGE BLAU

52227100 ERGOLINE 600 AVANTGARDE TURBO POWER SR AUGE BLAU KLIMA

34519800 ZENTRALABLUFTSTUTZEN SCHWARZ MIT WARMLUFTRÜCKF. F. AVANTGARDE 550/600

34519900 ZENTRALABLUFTSTUTZEN SCHWARZ OHNE WARMLUFTRÜCKF. F. AVANTGARDE 550/600

Suchfeld:

Bitte lesen Sie die Sicherheitshinweise zum gewählten Gerät!

Ich verweise mal auf http://selfhtml.teamone.de, da
ich mit meinem Latein am Ende bin.
Oder nochmal posten, damit klar ist, das dieser Thread
noch nicht geschlossen ist.

Gruss
Patrick

Hallo Knud,

Und ich möchte halt, dass mit dem Drücken der Enter-Taste NUR
meine Funktion aufgerufen wird, sonst nichts! Das war und ist
mein ursächliches Problem.

hätte dazu eine theoretische Idee (ist nicht ausprobiert): Rufe Deine Funktion über einen „normalen“ Button auf (input type=„button“) und versende das Formular bei Validität der Eingabe per JavaScript (http://selfhtml.teamone.de/javascript/objekte/forms…).

Gruß
Yasmin

Hallo Yasmin,

hätte dazu eine theoretische Idee (ist nicht ausprobiert):
Rufe Deine Funktion über einen „normalen“ Button auf (input
type=„button“) und versende das Formular bei Validität der
Eingabe per JavaScript

glaube nicht, dass es an dem „submit-input“ liegt. Hab den ganzen sumbit-Kram mal ganz rausgelassen und trotzdem wird bei Enter das Formular beendet, ob der input da ist oder nicht.

Gruß,

Knud

Hi.
Wie wäre es so:
Statt eines Submit-Buttons nimmst du einen normalen Button zum Abschicken. Wenn dieser angeklickt wird, setzt du per JavaScript eine Variable auf true (die vorher false war) und rufst dann form.submit() auf (form = dein Formularname). Bei onSubmit trägst du „return Variable“ (die von oben) ein. Dann sollte es eigentlich gehen.
CU,
Sebastian.