На следующей странице в Firefox кнопка удаления отправляет форму, а кнопка добавления — нет. Как предотвратить отправку формы кнопкой удаления?

<html>
<head>
<script type="text/javascript" src="jquery-1.3.2.min.js"></script>
<script type="text/javascript">
function addItem() {
  var v = $('form :hidden:last').attr('name');
  var n = /(.*)input/.exec(v);
  var newPrefix;
  if ( n[1].length == 0 ) {
    newPrefix = '1';
  } else {
    newPrefix = parseInt(n[1]) 1;
  }
  var oldElem = $('form tr:last');
  var newElem = oldElem.clone(true);
  var lastHidden = $('form :hidden:last');
  lastHidden.val(newPrefix);
  var pat = '="' n[1] 'input';
  newElem.html(newElem.html().replace(new RegExp(pat, 'g'), '="' newPrefix 'input'));
  newElem.appendTo('table');
  $('form :hidden:last').val('');
}
function removeItem() {
  var rows = $('form tr');
  if ( rows.length > 2 ) {
    rows[rows.length-1].html('');
    $('form :hidden:last').val('');
  } else {
    alert('Cannot remove any more rows');
  }
}
</script>
</head>
<body>
<form autocomplete="off" method="post" action="">
<p>Title:<input type="text" /></p>
<button onclick="addItem(); return false;">Add Item</button>
<button onclick="removeItem(); return false;">Remove Last Item</button>
<table>
<th>Name</th>

<tr>
  <td><input type="text" id="input1" name="input1" /></td>
  <td><input type="hidden" id="input2" name="input2" /></td>
</tr>
</table>
<input id="submit" type="submit" name="submit" value="Submit">
</form>
</body>
</html>

Теперь вы можете просто вызывать ее как обычную функцию, ничто иное не влияет Если все еще есть установка узла, повторите шаг 2. После того, как все в порядке, я устанавливаю, используя

, чтобы переопределить тип отправки по умолчанию. Я просто хочу указать причину, почему это бывает =)

<button type="button">Button</button>

=)

и удалите любой узел и node_modules

Работа с jquery под нагрузкой (кросс-браузер):

<button type="button" onclick="addItem(); return false;">Add Item</button>
<button type="button" onclick="removeItem(); return false;">Remove Last Item</button>

…, которая не позволит им инициировать действие отправки при возникновении исключения в обработчике событий. Затем исправьте свои removeItem(), чтобы не вызывать исключение:

function removeItem() {
  var rows = $('form tr');
  if ( rows.length > 2 ) {
    // change: work on filtered jQuery object
    rows.filter(":last").html('');
    $('form :hidden:last').val('');
  } else {
    alert('Cannot remove any more rows');
  }
}

Обратите внимание на изменение: ваш оригинальный код извлек элемент HTML из набора jQuery, а затем попытался вызвать для него метод jQuery — это вызвало исключение, что привело к поведению кнопки по умолчанию.

, и все мои всплывающие окна на всем моем сайте теперь работают полностью по-другому. Я мог бы даже определить функции, чтобы решить, что делать во всплывающем окне, или сохранить предпочтения пользователей, разрешать им или нет. С помощью встроенного onclick это требует огромных усилий по копированию и вставке. protectDefault () zip обновить узел до стабильного v объект для отмены поведения по умолчанию заранее:

$(function() // execute once the DOM has loaded
{

  // wire up Add Item button click event
  $("#AddItem").click(function(event)
  {
    event.preventDefault(); // cancel default behavior

    //... rest of add logic
  });

  // wire up Remove Last Item button click event
  $("RemoveLastItem").click(function(event)
  {
    event.preventDefault(); // cancel default behavior

    //... rest of remove last logic
  });

});

...

<button type="button" id="AddItem" name="AddItem">Add Item</button>
<button type="button" id="RemoveLastItem" name="RemoveLastItem">Remove Last Item</button>

Этот метод хранит всю вашу логику в одном месте, упрощая отладку … он также позволяет реализовать запасной вариант, изменив type на кнопках назад к submit Я столкнулся с проблемой при удалении узла .js на моем Mac. У меня было какое-то странное поведение, например . Возможно, он установил много разных версий Node.js, поэтому удалите их все (одну за другой). Глядя на вывод

Если вы хотите отсортировать по возрастанию, переключите выражения на каждой стороне знака минус.

То, что я положил здесь, как мне сделать так, чтобы форма могла быть отправлена ​​с помощью JavaScript без какой-либо проверки и выполнять проверку только тогда, когда пользователь нажимает кнопку (обычно кнопку отправки).

Для примера я буду использовать минимальную форму, только с двумя полями и кнопкой отправки.

Запомните, что нужно: из JavaScript его можно отправлять без какой-либо проверки. Однако, если пользователь нажимает такую ​​кнопку, проверка должна быть выполнена, и форма должна быть отправлена, только если она прошла проверку.

— это элемент HTML, который разрешен для любого другого элемента введите как ребенок.

<form method="post" id="theFormID" name="theFormID" action="">
   <input type="text" id="Field1" name="Field1" />
   <input type="text" id="Field2" name="Field2" />
   <input type="submit" value="Send" onclick="JavaScript:return Validator();" />
</form>

возвращает onsubmit="..." (помните, что это было условием его не иметь) ,

Проблема в том, что форма всегда отправляется, независимо от того, {{ } когда ошибки не было — т.е. когда ошибка необратима. onclick, возможно, вам нужно сделать true или false Глядя на вывод

Если я изменю type="submit" Я действительно смущен ответами, которые были даны — большинство из них просто неверны. Конечно, у вас могут быть свойства объекта с неопределенными, нулевыми или ложными значениями. Таким образом, просто уменьшив проверку свойства до type="button", похоже, работает, но не работает. Он никогда не отправляет форму, но это можно сделать легко.

Поскольку файл make поддерживает это, я могу сделать:

<form method="post" id="theFormID" name="theFormID" action="">
   <input type="text" id="Field1" name="Field1" />
   <input type="text" id="Field2" name="Field2" />
   <input type="button" value="Send" onclick="JavaScript:return Validator();" />
</form>

И на function Validator, где return True; только для того, чтобы это появилось в данных POST.

function Validator(){
   //  ...bla bla bla... the checks
   if(                              ){
      document.getElementById('theFormID').submit();
      return(true);
   }else{
      return(false);
   }
}

Переменная id="", зачисленного ниже, но в настоящее время в документации четко указано, что это getElementById, name="" Вот ссылка:

Так работает, как мне нужно.

Удалить узел и / или узлы_модулей из / usr / local / lib onsubmit Это может звучать странно, но не при мысли, например: при входе в систему … с некоторыми ограничениями … например, не разрешать использовать PHP сеансы и ни один куки не допускаются!

Object clone / copy

Причина: если пользователь — тот, кто выполняет отправку, я хочу, и мне нужно выполнить проверку, но если это JavaScript, иногда мне нужно выполнить отправку, в то время как такие проверки могут избежать Это.

в теге формы, мне нужно знать, если это пользовательский или другой JavaScript. Поскольку никакие параметры не могут быть переданы, это невозможно напрямую, поэтому некоторые люди добавляют переменную, чтобы сказать, должна ли быть выполнена проверка или нет. Первое, что нужно сделать в функции валидации — это проверить значение этой переменной и т. Д. Слишком сложно, и код не говорит, что действительно нужно.

, поэтому любая ссылка должна быть преобразована в такую ​​форму отправки, чтобы данные для входа не были потеряны. Когда еще не выполнен вход, это также должно работать. Поэтому проверка ссылок не должна выполняться. Но я хочу представить сообщение пользователю, если пользователь не ввел оба поля, user и pass. Поэтому, если кто-то отсутствует, форма не должна быть отправлена! есть проблема.

Смотрите проблему: форму нельзя отправлять, когда одно поле пусто только если пользователь нажал кнопку, если это код JavaScript, его можно отправить.

Если я сделаю работу над onsubmit Удалить npm * из / usr / local / share / man / man1 /

http://jsfiddle.net/S9upd/4/

Не только код более понятен, но и там, где он должен быть. Просто запомните это: — Я не хочу, чтобы JavaScript проверял форму (это всегда должно быть сделано PHP на стороне сервера) — Я хочу показать пользователю сообщение о том, что все поля не должны быть пустыми, что требует JavaScript (клиент боковая сторона)

Мало того, что код более понятен, он и должен быть. Просто запомните это: — Я не хочу, чтобы JavaScript проверял форму (это всегда должно быть сделано PHP на стороне сервера) — Я хочу показать пользователю сообщение о том, что все поля не должны быть пустыми, что требует JavaScript (клиент сторона)

. Почему некоторые люди (думают или говорят мне), что это должно быть сделано при проверке на месте? Нет, концептуально я не делаю проверку на стороне клиента. Я просто что-то нажимаю на кнопку, так почему бы просто не позволить этому быть реализованным?

Хорошо, что код и стиль отлично справляются с задачей. На любом JavaScript, который мне нужно отправить, я просто добавляю форму:

document.getElementById('theFormID').action='./GoToThisPage.php'; // Where to go
document.getElementById('theFormID').submit(); // Send POST data and go there

И это пропускает проверку, когда мне это не нужно. Он просто отправляет форму и загружает другую страницу и т. Д.

Но если пользователь нажимает кнопку отправки (хотя также в AngularJS, представление является официальной записью функциональности на основе представления). Наш type="button" not type="submit"), проверка выполняется до того, как форма будет отправлена ​​и, если она недействительна, не отправлена.

Надеюсь, это поможет другим не пытаться использовать длинный и сложный код. Просто не используйте onsubmit, если не нужен, и использование onclick В некоторых случаях достаточно сделать это задом наперед. Добавьте класс с помощью объявления javascript: type="submit"type="button", и, пожалуйста, не забудьте выполнить submit() с помощью JavaScript.

Согласие с Shog9, хотя вместо этого я мог бы использовать:

<input type = "button" onClick="addItem(); return false;" value="Add Item" />

Согласно w3schools , <button> отличается поведение в разных браузерах.

Медленный и надежный id="form_id"

<form id="form_id">
<!--your HTML code-->
</form>

Добавьте этот фрагмент jQuery в свой код, чтобы увидеть результат,

$("#form_id").submit(function(){
  return false;
});

$("form").submit(function () { return false; });, которое будет препятствовать отправке кнопки, или вы можете просто изменить тип кнопки на «button» <input type="button"/> вывод будет: <input type="submit"/> Что будет работать, только если эта кнопка не единственная в этой форме.

Как я могу объединить свойства двух объектов JavaScript динамически? — Переполнение стека

 $(document).ready(function () {
    $('#BUTTON_ID').click(function(e) {

            e.preventDefault();
            e.stopPropagation();
            e.stopImmediatePropagation();

            return false;
    });});

вернет объект со всеми параметрами запроса:

     <button type="submit" onclick="return false"> Register </button>

Таким образом, вы отмените отправку, но по-прежнему будете делать то, что делаете в функциях jquery или javascript, и будете выполнять отправку для пользователей, у которых нет javascript.

для родителя при каждом нажатии дочерней кнопки. Working

removeItem 

функция сталкивается с ошибкой JavaScript, это не происходит в IE

Когда появляется ошибка javascript, код «false для возврата» не запускается, что заставляет страницу выполнить обратную передачу

return false;

Вы можете вернуть false в конце функции или после вызова функции ,

для дополнительной информации.

Установите свою кнопку обычным способом и используйте event.preventDefault как ..

   <button onclick="myFunc(e)"> Remove </button>  
   ...
   ...

   In function...

   function myFunc(e){
       e.preventDefault();
   }

Вот простой подход:

$('.mybutton').click(function(){

    /* Perform some button action ... */
    alert("I don't like it when you press my button!");

    /* Then, the most important part ... */
    return false;

});

Возвращаемое значение false предотвращает поведение по умолчанию. но возвращаемое ложное прерывает всплеск дополнительных событий щелчка. Это означает, что если после вызова этой функции есть какие-либо другие привязки кликов, другие не учитывают.

 <button id="btnSubmit" type="button">PostData</button>
 <Script> $("#btnSubmit").click(function(){
   // do stuff
   return false;
}); </Script>

В следующем примере мы добавляем объект

 <button type="submit" onclick="return false"> PostData</button>

В следующем примере кода показано, как запретить отправку формы нажатием кнопки.

async: true

 <form autocomplete="off" method="post" action="">
   <p>Title:
     <input type="text" />
   </p>
   <input type="button" onclick="addItem()" value="Add Item">
   <input type="button" onclick="removeItem()" value="Remove Last Item">
   <table>
     <th>Name</th>

     <tr>
       <td>
         <input type="text" id="input1" name="input1" />
       </td>
       <td>
         <input type="hidden" id="input2" name="input2" />
       </td>
     </tr>
   </table>
   <input id="submit" type="submit" name="submit" value="Submit">
 </form>
<script language="javascript">
function addItem() {
return false;
}

function removeItem() {
return false;
}
</script>

Я не могу проверить это прямо сейчас, но я думаю, вы могли бы использовать protectDefault методом.

Функция removeItem фактически содержит ошибку, из-за которой кнопка формы выполняет свое поведение по умолчанию (отправка формы). Консоль ошибок javascript обычно дает указатель в этом случае.

P.S. Этот метод не требует, чтобы вы включали

строка:

rows[rows.length-1].html('');

не работает. Попробуйте вместо этого:

rows.eq(rows.length-1).html('');