works trigger net how asyncpostbacktrigger asp asp.net firefox webforms textarea

trigger - Error de DefaultButton del formulario Asp.Net en Firefox



how updatepanel works in asp net (3)

Para este problema en particular, la razón es porque javascript generado por ASP.NET 2.0 tiene alguna notación de solo IE: event.srcElement no está disponible en FireFox (use event.target en su lugar):

function WebForm_FireDefaultButton(event, target) { if (!__defaultFired && event.keyCode == 13 && !(event.srcElement && (event.srcElement.tagName.toLowerCase() == "textarea"))) { var defaultButton; if (__nonMSDOMBrowser) { defaultButton = document.getElementById(target); } else { defaultButton = document.all[target]; } if (defaultButton && typeof(defaultButton.click) != "undefined") { __defaultFired = true; defaultButton.click(); event.cancelBubble = true; if (event.stopPropagation) event.stopPropagation(); return false; } } return true; }

Si cambiamos las primeras 2 líneas en:

function WebForm_FireDefaultButton(event, target) { var element = event.target || event.srcElement; if (!__defaultFired && event.keyCode == 13 && !(element && (element.tagName.toLowerCase() == "textarea"))) {

Pon el código cambiado en un archivo y luego hazlo

protected void Page_Load(object sender, EventArgs e) { ClientScript.RegisterClientScriptInclude("js1", "JScript.js"); }

Entonces funcionará para IE y Firefox.

Fuente:

http://www.velocityreviews.com/forums/t367383-formdefaultbutton-behaves-incorrectly.html

El código generado por .Net para un formulario con el conjunto de atributos "DefaultButton" contiene un javascript pobre que permite que la funcionalidad funcione en IE pero no en otros navegadores (Firefox específicamente).

Al presionar la tecla Entrar, se envía el formulario con todos los navegadores, pero Firefox no puede ignorar la pulsación de la tecla cuando ocurre dentro de un control <textarea>. El resultado es un control de área de texto multilínea que no puede ser de líneas múltiples en Firefox ya que la tecla Intro envía el formulario en lugar de crear una nueva línea.

Para obtener más información sobre el error, léelo aquí .

Esto podría solucionarse en Asp.Net 3.0+, pero aún debe crearse una solución para 2.0.

¿Alguna idea para la solución más liviana (un truco que no se ve como un truco = D)? La solución en el enlace de arriba me asusta un poco, ya que podría tener fácilmente efectos secundarios no deseados.


Uso esta función adaptada de codesta. [Editar: el mismo, ya veo, que te asusta! Oops. No puedo ayudarte entonces]

http://blog.codesta.com/codesta_weblog/2007/12/net-gotchas---p.html .

Lo usas rodeando tu código con un div como ese. Podría subclasificar el Formulario para incluir esto automáticamente. No lo uso tanto, así que no lo hice.

<div onkeypress="return FireDefaultButton(event, ''<%= aspButtonID.ClientID %>'')"> (your form goes here) </div>

Aquí está la función.

function FireDefaultButton(event, target) { // srcElement is for IE var element = event.target || event.srcElement; if (13 == event.keyCode && !(element && "textarea" == element.tagName.toLowerCase())) { var defaultButton; defaultButton = document.getElementById(target); if (defaultButton && "undefined" != typeof defaultButton.click) { defaultButton.click(); event.cancelBubble = true; if (event.stopPropagation) event.stopPropagation(); return false; } } return true; }


Parece que la solución codesta.com a la que harpo link ya no es necesaria, ya que el fix event.srcElement no se integra en ASP.NET 3.5. Sin embargo, la implementación de DefaultButton todavía tiene algunos problemas, ya que está capturando la tecla Entrar en demasiados casos. Por ejemplo: si ha activado un botón en el formulario usando la pestaña, al presionar Enter debe hacer clic en el botón y no enviar el formulario.

Incluya el siguiente código JavaScript en la parte inferior de su página web ASP.NET para hacer que Enter se comporte como debería.

// Fixes ASP.NET''s behavior of default button by testing for more controls // than just textarea where the event should not be caugt by the DefaultButton // action. This method has to override ASP.NET''s WebForm_FireDefaultButton, so // it has to included at the bottom of the page. function WebForm_FireDefaultButton(event, target) { if (event.keyCode == 13) { var src = event.srcElement || event.target; if (!( src && ( src.tagName.toLowerCase() == "textarea" || src.tagName.toLowerCase() == "a" || ( src.tagName.toLowerCase() == "input" && ( src.getAttribute("type").toLowerCase() == "submit" || src.getAttribute("type").toLowerCase() == "button" || src.getAttribute("type").toLowerCase() == "reset" ) ) || src.tagName.toLowerCase() == "option" || src.tagName.toLowerCase() == "select" ) )) { var defaultButton; if (__nonMSDOMBrowser) { defaultButton = document.getElementById(target); } else { defaultButton = document.all[target]; } if (defaultButton && typeof (defaultButton.click) != "undefined") { defaultButton.click(); event.cancelBubble = true; if (event.stopPropagation) event.stopPropagation(); return false; } } } return true; }