2010-07-23 2 views
375

У меня есть форма, с 2-мя кнопкамиМогу ли я сделать <button> не присылать форму?

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

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

Я использую кнопку JQuery UI на них тоже, просто как этот

$('button').button(); 

Однако первая кнопка также отправляет форму. Я бы подумал, что если бы у него не было type="submit", это не так.

Очевидно, что я мог бы сделать это

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

Но есть способ, я могу остановить эту кнопку назад от отправки формы без вмешательства JavaScript?

Чтобы быть честным, я использовал кнопку только для того, чтобы я мог создать ее с помощью jQuery UI. Я попытался позвонить button() по ссылке, и он не работал должным образом (выглядел довольно уродливо!).

+0

Возможный дубликат [кнопка HTML не подавать форму] (http://stackoverflow.com/questions/2825856/html-button-to-not-submit-form) –

+0

использование 'Кнопка < type = "button"> 'для того, который не отправляет форму, и' 'для другого. Затем поймайте его с помощью jquery '$ ('# formID').submit (function (e) {}); ' – Airwavezx

ответ

831

значение по умолчанию для type attribute of button elementsявляется "submit".

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

Согласно w3schools, это [неверно для IE] (http://www.w3schools.com/tags/att_button_type.asp). – R0MANARMY

+9

@ R0MANARMY: Да, в IE <8, 'button' является' 'типом по умолчанию ... – CMS

+19

Это просто потрясающе плохой выбор дизайна. – octern

12

Просто используйте хороший старый HTML:

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

завернуть его в качестве предмета ссылки, если вам так хочется:

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

Или если вы решите, что вы хотите Javascript, чтобы предоставить некоторые другие функции :

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

Использование стандартного управления кнопками с соответствующим атрибутом типа -« старый добрый html »и создает гораздо более простую разметку. – R0MANARMY

+0

Это явно не проще, если в некоторых браузерах он имеет тип отправки по умолчанию, а в других - кнопку типа по умолчанию. Черт, даже если у вас есть тип отправки по умолчанию, это усложняет ситуацию больше, чем необходимо ИМО. Там должна быть разметка, которая легко предоставляет кнопку, которая ничего не делает. И есть: '' –

+0

+1 Я использовал эту точную технику много раз, и она всегда работала хорошо для меня. Один из вариантов - если вам нужно отменить событие обратной передачи для кнопки на стороне сервера, основанной на некотором вычислении на стороне клиента, вы можете включить window.event.returnValue = false; в вашем коде, который выполняется в клиентском onclick-событии для вашей кнопки ... то есть, если использование настраиваемого элемента управления проверки не вырезает горчицу для вас :) –

200

The button element имеет тип по умолчанию submit.

Вы можете сделать это не делать ничего, установив тип button:

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

Можно ли это сделать на серверном (C#) коде? –

+1

@ B.ClayShannon Не совсем. Вы можете использовать серверный код для возврата одной и той же страницы при нажатии кнопки, но она все равно перезагрузит страницу. В конечном счете кнопка является частью документа, и поэтому единственные способы сказать браузеру, как вы хотите, чтобы он действовал, - это HTML и JavaScript. – s4y

4

Честно говоря, мне нравятся другие ответы. Легко и не нужно входить в JS. Но я заметил, что вы спрашивали о jQuery. Итак, для полноты, в jQuery, если вы вернете false с обработчиком .click(), это будет отрицать действие виджета по умолчанию.

See here for an example (и больше лакомства, тоже). Here's the documentation, too.

в двух словах, с примерами кода, выполните следующие действия:

<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> 

В качестве дополнительного преимущества, с этим, вы можете избавиться от тега привязки и просто использовать кнопку.

+0

Любопытно, что добавление 'e.preventDefault()' ничего не делает для прекращения подачи (там, где оно начинается с 'function (e)'). – Sablefoste

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 
     } 
     } 

     ?> 
Смежные вопросы