tecla pulsar identificar funcion formulario evento desactivar capturar jquery internet-explorer

identificar - pulsar enter jquery



Botón Click El evento se dispara al presionar la tecla Enter en diferentes entradas(sin formularios) (5)

Esta lógica se activa al presionar "Enter" en la entrada "Amount", y no creo que debería (no en Chrome). ¿Cómo puedo evitar esto y, si no lo evito en IE, manejarlo para que la lógica en el evento click no se active?

<html> <body> <div id="page"> <div id="financed_amount"> <h1>Financed Amount:</h1> <input type="text" id="amount" value="" /> </div> <h1>Finance Options</h1> <div> <a id="shareLink" rel="leanModal" name="email" href="#email"></a> <button id="btnShare" class="share">Share this report</button> </div> </div> </body> </html>

Guión

$("#btnShare").click(function (e) { // This logic is firing when pressing "Enter" in the "Amount" input });

  • Jquery: 1.7.2
  • IE 9
  • (Funciona en Chrome)

Estaba teniendo este problema con ASP.NET WebForms:

<asp:Button />

Esto NO puede resolverse simplemente agregando type = "button" porque ASP.NET lo reemplaza con type = "submit" (puede ver este comportamiento en el navegador si inspecciona el elemento).

La forma correcta de hacerlo en asp.net es agregar

<asp:Button UseSubmitBehavior="false" />

al botón. ASP agregará automáticamente el atributo type = "button".


IE cree que cualquier elemento de button es un botón de envío (tanto si tiene un form como si no). También maneja la presión de la tecla Enter en un elemento de formulario como un envío de formulario implícito. Entonces, como cree que está intentando enviar su formulario, cree que lo ayudará y activará el evento de click en (lo que cree que es) el botón de enviar .

Puede adjuntar un evento de keyup a la input o al button y buscar la tecla Enter ( e.which === 13 ) y return false;


Me encontré con este problema hoy. IE supone que si presiona la tecla Intro en cualquiera de los campos de texto, desea enviar el formulario, incluso si los campos no son parte de un formulario e incluso si el botón no es del tipo "enviar".

Debe anular el comportamiento predeterminado de IE con preventDefault (). En su selector de jQuery, coloque el div que contiene los cuadros de texto que desea ignorar la tecla Intro - en su caso, la div "página". En lugar de seleccionar todo el div, también puede especificar los cuadros de texto que desea ignorar específicamente.

$(''#page'').keypress(function(e) { if(e.which == 13) { // Checks for the enter key e.preventDefault(); // Stops IE from triggering the button to be clicked } });


Tuve el mismo problema y lo resolví agregando el atributo type="button" al elemento <button> , mediante el cual IE considera el botón como un simple botón en lugar de un botón submit (que es el comportamiento predeterminado de un elemento <button> ) .


Una solución basada en jQuery que hace esto para cada botón es:

$(''button'').prop(''type'', ''button''); // To prevent IE from treating every button as a submit and firing a click() event

Sin embargo, el evento de clic seguirá burbujeando hasta los elementos principales por alguna razón ...