2012-03-12 24 views
10
$(window).keydown(function(event){ 
    if(event.keyCode == 13) { 
     event.preventDefault(); 
     return false; 
    } 
    }); 

Powyższy to kod mam, które skutecznie zabija „enter” jako zgłaszającego formularz w systemie, który właśnie Chcę. Jednak klawisz Enter jest również wyłączony na tagach textarea - które użytkownicy powinni mieć możliwość naciśnięcia klawisza Enter, aby przejść do następnych wierszy. Czy istnieje sposób modyfikowania powyższego kodu w celu wykrycia, czy wejście pochodzi z tagu textarea, to nie uruchamia zdarzenia.preventDefault(); linia?Zapobieganie „Enter” od złożenia formularza, ale pozwoli to na polach textarea (jQuery)

Mam wiele formularzy w całym serwisie - konfigurowanie ich indywidualnie byłoby koszmarem i prawdopodobnie nie ma sensu - musi być uniwersalny sposób. Powyższy kod działa na każdej stronie witryny, aby zapobiec przypadkowemu zgłoszeniu przez naciśnięcie "enter". enter code here

Odpowiedz

10

wolałbym zdarzenie keyup ... użyć właściwości

$(window).keydown(function(event){ 
    if((event.which== 13) && ($(event.target)[0]!=$("textarea")[0])) { 
     event.preventDefault(); 
     return false; 
    } 
    }); 

demo

+0

nie dość pracy - wciskającENTER na regularnych polach wejściowych wysyła formularz, który nie jest tym, czego chcę. – jeffkee

+1

to "textarea" zdefiniowane? – rjz

+0

@jeffkee zaktualizował odpowiedź za pomocą dema i naprawił kod – Rafay

0

event.target Dlaczego po prostu nie blokować formie za submit zdarzenie z wyzwalania zamiast?

$('form').submit(function(event){ 
    event.preventDefault(); 
}); 
+0

Ponieważ istnieją formularze, które są przesyłane przez przycisk wprowadzania, wpisz submit, więc nie mogę tego pominąć. nie wszystkie zgłoszenia są zorientowane na javascript (choć większość z nich wynika z zatwierdzenia formularza). – jeffkee

3

@ 3nigma „s rozwiązanie będzie działać dobrze, ale tutaj inny sposób osiągnięcia tego zachowania:

$(function(){ 
    $('#myform').find('input,select').keydown(function(event){ 
     if (event.keyCode == 13){ 
      event.preventDefault(); 
     } 
    }); 
}); 
1

wydaje się to dobra okazja, aby wykorzystać obiekt zdarzenia i skalpela-like podejście do tego komara zamiast podejścia podobnego do armatniego.

Innymi słowy, coś takiego:

... 
// Only watch for a bad type of submission when a submission is requested. 
$('form .contact-form').submit(function(e){ 
    // If a submit is requested, and it's done via keyboard enter, stop it. 
    if ((e.keyCode || e.which) == 13) ? ;){ // Try to use normalized enter key code 
     e.preventDefault(); // Prevent the submit. 
    } 
    // All other mouse actions just go through. 
}); 

Zaletą tutaj powinno być stosunkowo oczywiste, jeśli trafisz wejść wszędzie, że nie złoży formularza, kod ten nie wie, nie troska, nie powoduje problemów.

7

Możesz spróbować tego

$(document).ready(function(){ 
    $(window).keydown(function(event){ 
     if(event.keyCode == 13 && event.target.nodeName!='TEXTAREA') 
     { 
      event.preventDefault(); 
      return false; 
     } 
    }); 
}); 

ryba jest here.

+1

Działa to dobrze, ponieważ nie jest zgodne tylko z pierwszym tekstem. Obejmuje wszystkie teksty na stronie. Dzięki stosy. –

1

Znalazłem, że to działa najlepiej. Szczególnie, jeśli chcesz użyć klawiszy Enter w innych elementach, po prostu nie wysyłaj formularza z powrotem. Po prostu poszerzam odpowiedź na 3nigma.

$("form").keypress(function (event) { 
      if (event.keyCode == 13 && ($(event.target)[0]!=$("textarea")[0])) { 
       return false; 
      } 
     }); 
2
$('#form_editar').keypress(function(e) { 
    var allowEnter = {"textarea": true, "div": true}; 
    var nodeName = e.target.nodeName.toLowerCase(); 

    if (e.keyCode == 13 && allowEnter[nodeName] !== true) { 
     e.preventDefault(); 
    } 
}); 

edytować z @The Alpha nieco używam div dla edytorów WYSIWYG:) ...