Запобігання замовчуванню у формі Надіслати jQuery


138

Що з цим?

HTML:

<form action="http://localhost:8888/bevbros/index.php/test" method="post" accept-charset="utf-8" id="cpa-form" class="forms">        
      <input type="text" name="zip" value="Zip code" id="Zip" class="required valid">      
      <input type="submit" name="Next" value="Submit" class="forms" id="1">
  </form>

jQuery:

$("#cpa-form").submit(function(e){
    e.preventDefault();
  });

12
Тут добре працює . Чи можете ви опублікувати більше інформації у своєму запитанні? Якщо ви alert()в обробнику подання дзвонити? Якщо ні, то, можливо, у вашому скрипті є помилка, яка перешкоджає правильному підключенню обробника подій. Щось у консолі помилок?
Місто

3
Це посилання є внутрішнім і нам не приносить користі.
Стів Роббінс

Можливо, було збережено старішу версію. Здається, зараз це працює.
djreed

1
можливий дублікат event.preventDefault () vs return false
Ліам

2
! Переконайтеся, що код JavaScript працює після того, як DOM буде готовий.
буксирування

Відповіді:


175

Спробуйте це:

$("#cpa-form").submit(function(e){
    return false;
});

12
Він працює, але чому не використовується бажаний метод prevenDefault?
MikeJ

26
Дивіться це питання для кращого пояснення: stackoverflow.com/questions/1357118/…
Йордан Браун

8
Це неправильна відповідь. e.preventDefault()прекрасно працює з поданням форми, проблема лежить в іншому місці коду ОП. Використання return false може призвести до ненавмисних наслідків.
Чак Ле Бутт

58

Використовуйте новий синтаксис події "увімкнено".

$(document).ready(function() {
  $('form').on('submit', function(e){
    // validation code here
    if(!valid) {
      e.preventDefault();
    }
  });
});

Цитуйте: https://api.jquery.com/on/


2
Привіт. Це не працює для мене. (так, я поклав свій код всередину $(document).ready()) Як змусити його працювати?
Gui Imamura

1
@GuiImamura Потрібна додаткова інформація. Ви встановили дійсну змінну на trueабо false? Чи можете ви відтворити свій код на jsfiddle.net та надіслати посилання? Спробуйте додати, alert()щоб підтвердити, що функція працює. Деякі люди повідомили, що додавання e.stopPropagation();після e.preventDefault();зупинки інших прикутих подій від стрільби.
scarver2

Привіт, я використовую $('#myFormID').validationEngine('validate')з JQuery validationEngine в якості змінної valid, щоб перевірити погоду вхід дійсну адресу електронної пошти. Тим не менш, я хочу, щоб це запобігло поведінку за замовчуванням у будь-який спосіб; чи preventDefaultповинен бути всередині блоку if, а не перед ним?
Gui Imamura

@GuiImamura Радий почути, що ти змусив це працювати. Знаходиться preventDefaultвсередині блоку, якщо не відповідає дійсності, щоб зупинити подання форми. Іншими словами, якщо це дійсно , використовуйте поведінку форми за замовчуванням.
scarver2

13

Я вважаю, що наведені вище відповіді вірні, але це не вказує на те, чому submitметод не працює.

Добре, що submitметод не буде працювати, якщо jQuery не може отримати formелемент, а jQuery не може помилитися з цього приводу. Якщо ваш скрипт розміщено в заголовку документа, переконайтеся, що код працює після того, DOMяк готовий . Отже, $(document).ready(function () { // your code here // });вирішимо проблему.

Найкраща практика - завжди кладіть свій скрипт внизу документа.


11

Це давнє питання, але прийнята відповідь тут насправді не докорінюється до коріння проблеми.

Ви можете вирішити це двома способами. Спочатку з jQuery:

$(document).ready( function() { // Wait until document is fully parsed
  $("#cpa-form").on('submit', function(e){

     e.preventDefault();

  });
}

Або без jQuery:

// Gets a reference to the form element
var form = document.getElementById('cpa-form');

// Adds a listener for the "submit" event.
form.addEventListener('submit', function(e) {

  e.preventDefault();

});

Вам не потрібно використовувати return falseдля вирішення цієї проблеми.


Я замінив нативного слухача подій js замість слухача подій jquery, і це робота. дякую за ідею.
Орхан Газі

6
$('#cpa-form input[name="Next"]').on('click', function(e){
    e.preventDefault();
});

Це ідеально підходить для мене на сторінці, де у мене на формі на стороні сервера є форма клієнта.
Лікнес


2

Ваш Код є прекрасним, просто вам потрібно помістити його в готову функцію.

$(document).ready( function() {
  $("#cpa-form").submit(function(e){
     e.preventDefault();
  });
}

Цю пораду вже надають інші відповіді. Видаліть цю відповідь, щоб зменшити кількість розсипань сторінки. Ви можете схвалити інші відповіді, які представляють однакові настрої.
mickmackusa

2

ВИДАЛЕНО - ця частина застаріла, тому не використовуйте її.

Ви також можете спробувати цей код, якщо у вас є, наприклад, пізніші динамічні форми Наприклад, ви завантажили вікно async з ajax і хочете надіслати цю форму.

$('#cpa-form').live('submit' ,function(e){
    e.preventDefault();      
    // do something
});

ОНОВЛЕННЯ - вам слід скористатися методом jQuery on (), щоб спробувати прослухати документ DOM, якщо ви хочете обробляти динамічно доданий вміст.

Випадок 1, статична версія: Якщо у вас є лише кілька слухачів, і ваша форма для обробки є жорсткою, тоді ви можете слухати безпосередньо на "рівні документа". Я б не використовував слухачів на рівні документа, але я б спробував заглибитись у дерево дум, оскільки це може призвести до проблем із продуктивністю (залежить від розміру вашого веб-сайту та вашого вмісту)

$('form#formToHandle').on('submit'... 

АБО

$('form#formToHandle').submit(function(e) {
    e.preventDefault();      
    // do something
});

Випадок 2, динамічна версія: Якщо ви вже слухаєте документ у своєму коді, то цей спосіб був би для вас корисним. Це також буде працювати для коду, який був доданий пізніше через DOM або динамічний за допомогою AJAX.

$(document).on('submit','form#formToHandle',function(){
   // do something like e.preventDefault(); 
});

АБО

$(document).ready(function() {
    console.log( "Ready, Document loaded!" );

    // all your other code listening to the document to load 

    $("#formToHandle").on("submit", function(){
        // do something           
    })
});

АБО

$(function() { // <- this is shorthand version
   console.log( "Ready, Document loaded!" );

    // all your other code listening to the document to load 

    $("#formToHandle").on("submit", function(){
        // do something           
    })
});

7
.live()застаріла з jQuery 1.7 і видаляється з 1.9. Використовуйте .on()замість цього.
Хенк

0

Привіт шукав рішення, щоб змусити форму Ajax працювати з Менеджером тегів Google (GTM), помилка повернення завадила завершити і подати активацію події в режимі реального часу в рішенні аналітики google було змінити помилку повернення на e.preventDefault () ; який правильно працював, слід за кодом:

 $("#Contact-Form").submit(function(e) {
    e.preventDefault();
   ...
});

0

e.preventDefault () працює нормально, лише якщо у вас немає проблем з вашими javascripts, перевірте свої javascripts, якщо e.preventDefault () не працює, можливо, деякі інші частини вашого JS також не працюють


0

Ну я зіткнувся з подібною проблемою. Проблема для мене полягає в тому, що файл JS завантажується до того, як станеться візуалізація DOM. Тож перенесіть <script>на кінець <body>тегу.

або використовувати відкладати.

<script defer src="">

тож будьте впевнені, e.preventDefault()має працювати.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.