2010-11-19 48 views
82

Estoy trabajando en una aplicación web ASP.net.¿Cómo puedo cancelar el envío del formulario en el botón Enviar evento onclick?

Tengo un formulario con un botón Enviar. El código para el botón Enviar se parece al <input type='submit' value='submit request' onclick='btnClick();'>.

Quiero escribir algo como lo siguiente:

function btnClick() { 
    if (!validData()) 
     cancelFormSubmission(); 
} 

¿Cómo se hace esto?

+0

ouch, esto me está haciendo doler la cabeza. Tengo varias entradas diferentes de 'enviar'. Creo que intentaré usar los controles del lado del servidor en esta página. –

+1

posible duplicado de [¿Cómo evitar que se envíe el formulario?] (Http://stackoverflow.com/questions/3350247/how-to-prevent-form-from-being-submitted) –

Respuesta

146

Usted es mejor hacer ...

<form onsubmit="return isValidForm()" /> 

Si isValidForm() vuelve false, a continuación, su forma no presentara.

Probablemente también deba mover su controlador de eventos desde la línea.

document.getElementById('my-form').onsubmit = function() { 
    return isValidForm(); 
}; 
+0

Bueno, pero parece que no puedo hacer que 'onsubmit' funcione cada vez que uso ASP.net porque asp.net lo envuelve TODO en su propia forma ... –

+5

Puedes usar su segunda sugerencia. JavaScript en línea es el demonio de todos modos. – Stephen

+3

Si está utilizando ASP.NET web forms (hint: do not) entonces no intente incluir otros formularios. Ellos son simplemente incompatibles. Escuché que ASP.NET MVC te permite crear aplicaciones web usando marcado idiomático. – Quentin

0

uso onclick='return btnClick();'

y

function btnClick() { 
    return validData(); 
} 
+2

presionar enter omitirá el cheque. Use onSubmit – Cfreak

0
function btnClick() { 
    return validData(); 
} 
+1

. Es necesario hacer más que esto para que funcione. He intentado hacer que el functino sea verdadero o falso y no parece hacer ninguna diferencia. –

+1

Su respuesta es correcta. Upvoted. También debe devolverlo en la etiqueta de entrada – Cfreak

+1

. Prefiero usar 'ev.preventDefault()' o 'ev.returnValue = false' para cancelar el comportamiento predeterminado pero no evitar el burbujeo del evento, en caso de que otros controles observen el mismo evento en el mismo elemento. Use 'return false' solo cuando quiera evitar que el evento burbujee ** y ** cancele la acción predeterminada. Ver [este artículo] (http://javascript.about.com/library/bldom21.htm). –

11

Es necesario cambiar

onclick='btnClick();' 

a

onclick='return btnClick();' 

y

cancelFormSubmission(); 

a

return false; 

Dicho esto, me gustaría tratar de evitar los atributos de eventos intrínsecos a favor de unobtrusive JS con una biblioteca (como YUI o jQuery) que tiene un buen evento manejar la API y vincularse al evento que realmente importa (es decir, el evento de envío del formulario en lugar del evento de clic del botón).

+0

El uso de onclick le permitirá al usuario presionar enter y omitir el control. – Cfreak

34

Cambiar la entrada a este:

<input type='submit' value='submit request' onclick='return btnClick();'> 

y regresar falsa en su función

function btnClick() { 
    if (!validData()) 
     return false; 
} 
1

Por qué no cambia el botón de enviar a un botón regular, y en el evento de clic, enviar el formulario si pasa tus pruebas de validación?

por ejemplo

<input type='button' value='submit request' onclick='btnClick();'> 

function btnClick() { 
    if (validData()) 
     document.myform.submit(); 
} 
+1

Al presionar enter omitirá el cheque. Use onSubmit – Cfreak

+0

Luego, no funcionará si JavaScript no está disponible. Build on things that work. – Quentin

0

Usted necesita onSubmit. No onClick de lo contrario, alguien puede presionar enter y omitirá su validación. En cuanto a la cancelación. necesitas devolver falso. Aquí está el código:

<form onSubmit="return btnClick()"> 
<input type='submit' value='submit request'> 

function btnClick() { 
    if (!validData()) return false; 
} 

Editar onSubmit pertenece a la etiqueta de formulario.

+0

esto no funcionará. si los datos son válidos, no devuelve verdadero. Poner el retorno verdadero; al final de la función btnClick() – NickSoft

3

Necesitas return false;:

<input type='submit' value='submit request' onclick='return btnClick();' /> 

function btnClick() { 
    return validData(); 
} 
4

debe cambiar el tipo de submit a button:

<input type='button' value='submit request'> 

en lugar de

<input type='submit' value='submit request'> 

a continuación, obtener el nombre de su botón en javascript y asociar cualquier acción que desea que

var btn = document.forms["frm_name"].elements["btn_name"]; 
btn.onclick = function(){...}; 

trabajó para mí espero que ayude.

0

Es simple, solo devuelve falso;

El código siguiente pasa dentro del onclick del botón de enviar usando jQuery ..

if(conditionsNotmet) 
{ 
return false; 
} 
3

veces onsubmit no quiere trabajar con asp.net.

Lo resolví de una manera muy fácil.

si tenemos una forma tal

<form method="post" name="setting-form" > 
    <input type="text" id="UserName" name="UserName" value="" 
     placeholder="user name" > 
    <input type="password" id="Password" name="password" value="" placeholder="password" > 
    <div id="remember" class="checkbox"> 
    <label>remember me</label> 
    <asp:CheckBox ID="RememberMe" runat="server" /> 
    </div> 
    <input type="submit" value="login" id="login-btn"/> 
</form> 

Ahora puede coger conseguir ese caso, antes de la forma de devolución de datos y evitar que la devolución de datos y hacer todo el Ajax desea utilizar este jQuery.

$(document).ready(function() { 
      $("#login-btn").click(function (event) { 
       event.preventDefault(); 
       alert("do what ever you want"); 
      }); 
}); 
Cuestiones relacionadas