2011-01-05 8 views
2

Hatte einen Blick und fand einige Dinge auf diesem, aber nichts scheint zu funktionieren, wie ich es möchte.Javascript Shift + Enter (Firefox)

Anfänge hatte ich meine Lösung mit Internet Explorer und Chrome arbeiten, aber nicht firefox (was für mich nicht zufriedenstellend ist nicht funktioniert zu haben)

Was ich suche ist ein einfacher Textbereich, der auf Daten sendet Enter-Taste, erzeugt aber eine neue Zeile bei Shift + Enter. Hier finden Sie, was ich habe

function goReturn(e,str) { 

    var e = (window.Event) ? e.which : e.keyCode; 
    if (e.shiftKey && e=="13") { 
    document.getElementById("wall").value = 
     document.getElementById("wall").value+"\n"; 
    } else if(e=="13"){ 
    // ...continue to send data 
    } 
} 

Dieser sendet die Daten auf ein, sondern sendet auch die Daten auf Verschiebung und geben (was das Problem ist, ich habe).

Vielen Dank für jede Hilfe

+0

Warum fügen Sie Ihre Zahlen in Anführungszeichen ein? 'e.which' ist keine Zeichenkette! – jwueller

+0

Bitte ändern Sie nicht das Standardverhalten von Textbereichen. Durch Drücken von Return sollte immer eine neue Zeile eingefügt werden. Wenn überhaupt, sollten Sie den Großteil des Standardverhaltens beibehalten und stattdessen shift + enter verwenden, um das Formular zu senden. – meagar

+0

Sie überschatten die erste Zeile der Funktion mit "e". 'e.shiftKey' wird immer falsch sein (es sei denn, Sie haben diese Eigenschaft den String-Prototypen hinzugefügt ...). Ich gehe davon aus, dass Ihr tatsächlicher Code dies nicht tut, können Sie Ihre Frage damit aktualisieren? – Gijs

Antwort

1

Fang des Anruf in Ihrem Formular (onsubmit = "..."). Dort prüfen, ob der letzte enter in Verbindung mit shift ist. Wenn ja, geben Sie false für die Übermittlungsanforderung zurück.

Sie können auch versuchen, wenn die Rückgabe false auf e.shiftKey && e=="13" ausreichend ist.

+0

Hi das Textfeld selbst kommt nicht aus einer Form, es sitzt auf sich selbst. Und ruft die Funktion onkeyup auf (und einen onkeydown) –

1

Sie sollten in der Lage sein, die Ereignisausbreitung durch e.cancel = true; abzubrechen, aber ich sehe, dass Sie derzeit die e Variable (Ereignisobjekt) überschreiben. Wenn Sie Ihren Code auf die folgenden ändern würde, sollten Sie sich gut:

function goReturn(e_obj,str) { 

    var e = (window.Event) ? e_obj.which : e_obj.keyCode; 
    if (e.shiftKey && e=="13") { 
    document.getElementById("wall").value = 
     document.getElementById("wall").value+"\n"; 
    e_obj.cancel = true; 
    } else if(e=="13"){ 
    // ...continue to send data 
    } 
} 
0

ich ein jQuery-Plugin für meinen eigenen Gebrauch Fall geschrieben haben und es könnte Ihnen passen: http://cburgmer.github.com/jquery-shiftenter/

Das Plugin übernimmt Handling Die Eingabetaste und zeigt außerdem einen Hinweis auf den Fokus an, um das Verhalten zu erklären.

Verwandte Themen