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

Quanto sopra è il codice che ho ottenuto che uccide efficacemente il tasto "invio" come un mittente del modulo in tutto il sistema, che è esattamente ciò che Voglio. Tuttavia, il tasto invio è disabilitato anche sui tag textarea, che gli utenti dovrebbero essere in grado di premere enter per andare alle righe successive. Quindi c'è un modo per modificare il codice precedente per rilevare se l'input proviene da un tag textarea, non esegue event.preventDefault(); linea?Prevenire "Invio" dall'invio del modulo, ma consentirlo nei campi textarea (jQuery)

Ho così tante forme in tutto il sito - dover configurarle singolarmente sarebbe un incubo, e probabilmente non ha senso - ci deve essere un modo universale. Il codice sopra riportato viene eseguito su ogni singola pagina del sito per impedire l'invio accidentale premendo "invio". enter code here

risposta

10

io preferirei l'evento keyup ... utilizzare la proprietà event.target

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

demo

+0

Forse non proprio lavoro - del tasto invio su campi di input regolari invia il modulo, che non è quello che voglio – jeffkee

+1

è definito 'textarea'? – rjz

+0

@jeffkee ha aggiornato la risposta con una demo ha anche corretto il codice – Rafay

0

Perché non solo bloccare evento del form submit da innescare, invece?

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

Perché ci sono moduli inviati dal tipo di pulsante di input submit, quindi non posso sopprimerlo. non tutte le presentazioni sono orientate per javascript (sebbene la maggior parte sia dovuta alla convalida del modulo). – jeffkee

3

@ 3nigma 's soluzione avrebbe funzionato bene, ma qui un altro modo per raggiungere questo comportamento:

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

Questa sembra una buona occasione per utilizzare l'oggetto evento e un bisturi simile approccio su questa zanzara invece di un approccio tipo cannone.

In altre parole, qualcosa di simile:

... 
// 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. 
}); 

Il vantaggio dovrebbe essere relativamente ovvio, se si ha colpito entrare da nessuna parte che non si sottomette un modulo, questo codice non sa, non lo fa cura, non causa problemi.

7

Si può provare questo

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

un violino è here.

+1

Funziona bene, poiché non è conforme solo alla 1a textarea. Copre tutti i campi di testo sulla pagina. Grazie mille. –

1

Ho trovato che funziona meglio. Soprattutto se si desidera utilizzare i comportamenti chiave di immissione in altri elementi, è sufficiente non inviare nuovamente il modulo. Sto solo espandendo la risposta di 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(); 
    } 
}); 

modifico da @The Alpha un po ', io uso div per editor WYSIWYG:) ...

Problemi correlati