Pregunta TextBox causa devolución de botón en ASP.NET


ASP.NET 2.0, pruebas en FF3 e IE7.

Cuando presiono el botón 'enter' desde un cuadro de texto, se activa el evento "OnClick" correspondiente para el primer ImageButton en la página. Si elimino ese botón de imagen, se dispara el siguiente evento ImageButton OnClick en la página.

Desde la consola de FireBug, si uso JavaScript para enviar el formulario, esto no sucede. Pero por el motivo que sea, al pulsar Entrar en el cuadro de texto se activa el evento ImageButton no relacionado.

encontré esta pregunta que tenía un problema similar, sin embargo, la respuesta propuesta a esa solución no funciona ya que ImageButtons no tiene una propiedad "UseSubmitBehavior" en ellos.

No entiendo por qué este evento está disparando. Si observo Request.Form, puedo ver que __EVENTTARGET está vacío y, de hecho, está publicando todo el contenido del formulario (todos mis cuadros de texto), pero también incluye los pares clave / valor imageButton.x e imageButton.y.

¿Por qué es esto? Supongo que podría detectar "ingresar" pulsando las teclas de estos cuadros de texto con javascript, pero mi experiencia en el pasado es que este comportamiento es muy variable entre los navegadores. ¿Alguna sugerencia?


5
2018-05-01 20:20


origen


Respuestas:


Puede intentar configurar un botón predeterminado en un panel de asp o en su formulario. Esto le permitirá controlar lo que sucede cuando un usuario pulsa la tecla Intro.


3
2018-05-01 20:24



Aquí hay una solución más elegante.

<asp:TextBox ID="TextBox1" runat="server" onkeydown = "return (event.keyCode!=13);" > </asp:TextBox>

leer el post completo aquí


6
2018-06-02 00:47



Estoy teniendo el mismo problema en mi proyecto.

Este problema es causado porque ASP.NET siempre asumirá que el primer elemento que hereda de IButton Interfaz (Button y ImageButton) es el botón predeterminado de la página.

Hipotéticamente, si utiliza un botón LinkButton en lugar de Button o ImageButton, este problema se solucionará.

Puedes encontrar más información aquí en MSDN.


3
2017-09-11 17:38



Puede deshabilitar la pulsación de la tecla Intro, por lo que el usuario tendrá que hacer clic en sus botones de imagen. Simplemente pegue este bloque de javascript en su página:

<script type="text/javascript">
function stopRKey(evt) { 
  var evt = (evt) ? evt : ((event) ? event : null); 
  var node = (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement : null); 
  if ((evt.keyCode == 13) && (node.type=="text"))  {return false;} 
}
document.onkeypress = stopRKey;
</script>

1
2018-05-01 20:36



Recientemente, he estado haciendo más en el cliente con servicios web y menos devoluciones de datos. Al mover mis controles fuera del elemento de formulario (o eliminarlo por completo), el problema desaparece. Se inserta por defecto en las páginas aspx, pero no se me ocurrió hasta hace poco que no lo necesito para mucho de lo que hago.


1
2018-01-10 19:28



Es el comportamiento predeterminado de un botón de entrada al presionar en un área sin texto para enviar un formulario. Tendría que manejarlo en un método javascript para detener la devolución.

Solo deberías verificar la propiedad window.event.keyCode para ver si es igual a 13. Si lo es, restablézcalo a 0.

function KeyPress()
  {
     if (window.event.keyCode == 13)
        {
           window.event.keyCode = 0;
        }
  }

0
2018-05-01 20:28



Supongo que podría detectar "ingresar" pulsando las teclas de estos cuadros de texto con javascript

Eso es lo que hice para evitar ese comportamiento y funciona muy bien en IE7 y FF3. Es solo un poco antinatural.

Aquí hay un ejemplo genérico:

    function TextBox1_KeyDown(sender, e)
    {
    var key;
        if(window.event)
            key = window.event.keyCode; //IE
        else
            key = e.which; //firefox
        if(key == 13 && $("#TextBox1").val() != "")
        {
            WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions("TextBox1", "", true, "", "", false, true));
        }
        return (key != 13);
    }

Utilicé WebForm_DoPostBackWithOptions porque necesitaba validadores para disparar. De lo contrario, es posible que desee utilizar __DoPostBack.

Aquí están los "prototipos":

function __doPostBack(eventTarget, eventArgument)

function WebForm_PostBackOptions(eventTarget, eventArgument, validation, validationGroup, actionUrl, trackFocus, clientSubmit)
{
    this.eventTarget = eventTarget;
    this.eventArgument = eventArgument;
    this.validation = validation;
    this.validationGroup = validationGroup;
    this.actionUrl = actionUrl;
    this.trackFocus = trackFocus;
    this.clientSubmit = clientSubmit;
}

function WebForm_DoPostBackWithOptions(options)

Espero eso ayude.

P.S .: Usé JQuery aquí, pero $ get sería el mismo.


0
2018-05-01 20:30



He aquí una solución elegante que he encontrado, en caso de que alguien más tenga este problema (en caso de que ninguna otra solución no funcione para usted, ya que no funcionó para mí):

<asp:UpdatePanel runat="server">
<ContentTemplate>
    <asp:Panel runat="server" DefaultButton="doNothingButton">
        <ul id="shopping-list-ul">
        </ul>
        <asp:Button CssClass="invisible" runat="server" ID="doNothingButton" OnClientClick="return false;" />
    </asp:Panel>
</ContentTemplate>

El cuadro de texto iself estaba dentro de la ul (generado por javascript).
Al presionar enter se activará el "doNothingButton", que devolverá el valor falso en el lado del cliente, ¡sin que se produzcan devoluciones en absoluto!


0
2017-10-13 17:14