2010-07-23 22 views
375

Tengo un formulario, con 2 botones¿Puedo hacer un <button> no enviar un formulario?

<a href="index.html"><button>Cancel changes</button></a> 

<button type="submit">Submit</button> 

utilizo el botón de jQuery UI en ellos también, simplemente como esto

$('button').button(); 

Sin embargo, el primer botón también envía el formulario. Hubiera pensado que si no tuviera el type="submit", no lo haría.

Obviamente, podría hacer esto

$('button[type!=submit]').click(function(event) { event.stopPropagation(); }); 

Pero hay una manera puedo dejar que el botón de vuelta de enviar el formulario sin intervención JavaScript?

Para ser sincero, utilicé solo un botón para poder diseñarlo con jQuery UI. Intenté llamar al button() en el enlace y no funcionó como se esperaba (¡parecía bastante feo!).

+0

Posible duplicado de [botón HTML que no presente la Forma] (http://stackoverflow.com/questions/2825856/html-button-to-not-submit-form) –

+0

uso ' 'para el que no envía el formulario y' 'para el otro. Luego tómalo con jquery '$ ('# formID').submit (función (e) {}); ' – Airwavezx

Respuesta

831

el valor por defecto para el type attribute of button elementses "enviar".

<button type=button>Submit</button> 
+11

De acuerdo con w3schools, eso [no es cierto para IE] (http://www.w3schools.com/tags/att_button_type.asp). – R0MANARMY

+9

@ R0MANARMY: Sí, en IE <8, el 'botón' es el 'tipo' predeterminado ... – CMS

+19

Esa es una opción de diseño sorprendentemente mala. – octern

12

sólo tiene que utilizar el bueno de HTML:

<input type="button" value="Submit" /> 

envolverlo como sujeto de un enlace, si así lo desea:

<a href="http://somewhere.com"><input type="button" value="Submit" /></a> 

O si usted decide que quiere javascript para proporcionar alguna otra funcionalidad :

<input type="button" value="Cancel" onclick="javascript: someFunctionThatCouldIncludeRedirect();"/> 
+6

El uso de un control de botón estándar con el atributo de tipo adecuado es" buen viejo html "y crea un marcado mucho más simple. – R0MANARMY

+0

Claramente no es más sencillo si en algunos navegadores tiene un tipo de envío predeterminado y en otros tiene un tipo predeterminado de botón. Diablos, incluso el solo hecho de tener el tipo predeterminado de envío complica las cosas más de lo que es necesario. Debería haber un marcado que proporciona fácilmente un botón que no hace nada. Y hay: '' –

+0

+1 He usado esta técnica exacta muchas veces, y siempre me ha funcionado. Una variante es si necesita cancelar el evento de devolución de datos para un botón del lado del servidor según algunos cálculos del lado del cliente, puede incluir window.event.returnValue = false; en su código que se ejecuta en el evento onclick del lado del cliente para su botón ... es decir, si usa un control de validación personalizado no se corta la mostaza :) –

200

The button element tiene un tipo predeterminado de submit.

Puede hacer que haga nada mediante el establecimiento de un tipo de button:

<button type="button">Cancel changes</button> 
+0

¿Se puede hacer esto en el código del lado del servidor (C#)? –

+1

@ B.ClayShannon No realmente. Puede usar el código del lado del servidor para devolver la misma página cuando se hace clic en el botón, pero aún así volverá a cargar la página. En última instancia, el botón es parte del documento y, por lo tanto, las únicas formas de decirle al navegador cómo quiere que actúe son HTML y JavaScript. – s4y

4

Honestamente, me gusta las otras respuestas. Fácil y sin necesidad de ingresar a JS. Pero noté que estabas preguntando sobre jQuery. Por lo tanto, para completar, en jQuery si devuelve false con el controlador .click(), se negará la acción predeterminada del widget.

See here for an example (y más obsequios, también). Here's the documentation, too.

en pocas palabras, con su código de ejemplo, hacer esto:

<script type="text/javascript"> 
    $('button[type!=submit]').click(function(){ 
     // code to cancel changes 
     return false; 
    }); 
</script> 

<a href="index.html"><button>Cancel changes</button></a> 
<button type="submit">Submit</button> 

Como beneficio adicional, con esto, usted puede deshacerse de la etiqueta de anclaje y sólo tiene que utilizar el botón.

+0

Curiosamente, agregar 'e.preventDefault()' no hace nada para detener el envío (donde comienza con 'function (e)'). – Sablefoste

4
<form onsubmit="return false;"> 
    ... 
</form> 
0
<form class="form-horizontal" method="post"> 
     <div class="control-group"> 

      <input type="text" name="subject_code" id="inputEmail" placeholder="Subject Code"> 
     </div> 
     <div class="control-group"> 
      <input type="text" class="span8" name="title" id="inputPassword" placeholder="Subject Title" required> 
     </div> 
     <div class="control-group"> 
      <input type="text" class="span1" name="unit" id="inputPassword" required> 
     </div> 
      <div class="control-group"> 
      <label class="control-label" for="inputPassword">Semester</label> 
      <div class="controls"> 
       <select name="semester"> 
        <option></option> 
        <option>1st</option> 
        <option>2nd</option> 
       </select> 
      </div> 
     </div> 

     <div class="control-group"> 
      <label class="control-label" for="inputPassword">Deskripsi</label> 
      <div class="controls"> 
        <textarea name="description" id="ckeditor_full"></textarea> 
<script>CKEDITOR.replace('ckeditor_full');</script> 
      </div> 
     </div> 



     <div class="control-group"> 
     <div class="controls"> 

     <button name="save" type="submit" class="btn btn-info"><i class="icon-save"></i> Simpan</button> 
     </div> 
     </div> 
     </form> 

     <?php 
     if (isset($_POST['save'])){ 
     $subject_code = $_POST['subject_code']; 
     $title = $_POST['title']; 
     $unit = $_POST['unit']; 
     $description = $_POST['description']; 
     $semester = $_POST['semester']; 


     $query = mysql_query("select * from subject where subject_code = '$subject_code' ")or die(mysql_error()); 
     $count = mysql_num_rows($query); 

     if ($count > 0){ ?> 
     <script> 
     alert('Data Sudah Ada'); 
     </script> 
     <?php 
     }else{ 
     mysql_query("insert into subject (subject_code,subject_title,description,unit,semester) values('$subject_code','$title','$description','$unit','$semester')")or die(mysql_error()); 


     mysql_query("insert into activity_log (date,username,action) values(NOW(),'$user_username','Add Subject $subject_code')")or die(mysql_error()); 


     ?> 
     <script> 
     window.location = "subjects.php"; 
     </script> 
     <?php 
     } 
     } 

     ?> 
Cuestiones relacionadas