Obecnie, jeśli osoba wciśnie enterwewnątrz pola tekstowego, formularz zostanie przesłany.
Dobrze, chcę tego.
Ale kiedy wpiszą shift+ enter, chcę, aby obszar tekstu przeszedł do następnej linii:\n
Jak mogę to zrobić w JQuery
prostym JavaScript lub tak prosto, jak to tylko możliwe?
javascript
jquery
html
css
TIMEX
źródło
źródło
e.shiftKey
.shiftKey
.Odpowiedzi:
Lepiej użyj prostszego rozwiązania:
Poniższe rozwiązanie Tima jest lepsze, sugeruję użycie tego: https://stackoverflow.com/a/6015906/4031815
Moje rozwiązanie
Myślę, że możesz zrobić coś takiego ...
EDYCJA: Zmieniono kod, aby działał niezależnie od pozycji opiekuna
Pierwsza część kodu służy do określenia pozycji daszka.
Ref: Jak uzyskać pozycję kolumny daszka (nie pikseli) w obszarze tekstu, w znakach, od początku?
A następnie odpowiednio zastępując wartość textarea, gdy Shift+ Enterrazem, prześlij formularz, jeśli Enterzostanie naciśnięty sam.
Oto demo
źródło
event.keyCode == 13
) i myślę, że prawdopodobnie też chciałeśevent.preventDefault()
zamiastevent.stopPropagation()
.event.stopPropagation()
chciałem zatrzymać jakiś inny kod, który mógł mieć pisemną przesłać formularz.event.stopPropagation()
, to zapobiegnie dalszemu bulgotaniu zdarzenia w górę DOM, ale nie uniemożliwi naciśnięciu klawisza wykonania domyślnej akcji wstawiania końca wiersza (chociaż w rzeczywistościkeyup
moja sugestia też tegoevent.preventDefault()
nie zrobi).carent
nie jest zdefiniowany, jeśli zmienię go na daszek, dodaje 2 nowe linieProste i eleganckie rozwiązanie:
Po pierwsze, naciśnięcie Enterwewnątrz obszaru tekstowego nie powoduje wysłania formularza, chyba że masz skrypt, który to zrobi. Jest to zachowanie, którego oczekuje użytkownik i odradzałbym go zmieniać. Jeśli jednak musisz to zrobić, najłatwiejszym podejściem byłoby znalezienie skryptu, który dokonuje Enterwysłania formularza, i jego zmiana. Kod będzie miał coś takiego
... i możesz to po prostu zmienić na
Z drugiej strony, jeśli z jakiegoś powodu nie masz dostępu do tego kodu, musisz wykonać następujące czynności, aby działał we wszystkich głównych przeglądarkach, nawet jeśli daszek nie znajduje się na końcu tekstu:
jsFiddle: http://jsfiddle.net/zd3gA/1/
Kod:
źródło
Większość z tych odpowiedzi komplikuje to zbytnio. Dlaczego nie spróbować tego w ten sposób?
Żadnego majstrowania przy pozycji karetki lub wpychania linii przerywa się w JS. Zasadniczo funkcja nie będzie działać, jeśli zostanie naciśnięty klawisz Shift, dzięki czemu klawisz Enter / Return będzie mógł wykonywać swoje normalne funkcje.
źródło
Dlaczego nie po prostu
źródło
Użyj wtyczki jQuery hotkeys i tego kodu
źródło
Oto rozwiązanie AngularJS używające ng-keyup, jeśli ktoś ma ten sam problem z AngularJS.
źródło
Użycie ReactJS ES6 to najprostszy sposób
shift+ enterNowa linia w dowolnej pozycji
enter Zablokowany
źródło
Znalazłem ten wątek, szukając sposobu na kontrolowanie Shift + dowolny klawisz. Skleiłem inne rozwiązania, aby ta połączona funkcja osiągnęła to, czego potrzebowałem. Mam nadzieję, że pomoże to komuś innemu.
źródło
Na wypadek, gdyby ktoś wciąż się zastanawiał, jak to zrobić bez jQuery.
HTML
<textarea id="description"></textarea>
Javascript
Vanilla JS
źródło
Używam div, dodając contenteditable true zamiast używać textarea.
Hope może ci pomóc.
źródło
To działa dla mnie!
źródło
using
ng-keyup
dyrektywy w angularJS, wyślij wiadomość tylko po naciśnięciuEnter
klawisza iShift+Enter
po prostu zajmie nową linię.źródło