Javascript: как отменить отправку формы без возврата false? - PullRequest
0 голосов
/ 06 марта 2012

У меня есть код отправки формы, который выполняет вызов AJAX и перенаправляет оттуда, если совпадение найдено.

Но почему-то возвращаемое значение false опускается, и форма отправляется.

Я не хочу использовать return false, и должен отменить отправку для всех случаев. Есть ли какой-либо метод jquery для этого?

function getLogin()
{       
    //cancel form submission code here


    $username = $('#username').val();
    $password = $('#password').val();
    console.log('Logging- '+$username+' - '+$password);

    callAjaxService($username, $password);  // redirects according to response from this method
}

HTML

 <form action=""  method="get" onSubmit="getLogin();">

Фактический код находится в Jquery-mobile и имеет проблему с return false; в конце функции getLogin () - он не может остановить отправку формы.

Ответы [ 6 ]

2 голосов
/ 06 марта 2012

Предполагая, что getLogin привязан к кнопке / ссылке отправки формы, вы можете использовать protectDefault и stopPropagation

function getLogin(e)
{       
    //cancel form submission code here
    e.preventDefault();
    e.stopPropagation();
}

Избавиться от onSubmit="getLogin();"

<form id="uniqueID" action=""  method="get">

, а затем использовать готов

$(function(){
    $("#uniqueID").click(getLogin);
})
1 голос
/ 06 марта 2012

Я точно не знаю, работает ли это, но я попробую настроить обработчик отправки:

$('#myform').submit(function(){
  var user = $('#username').val();
  var pw = $('#password').val();
  $.ajax(..., { success: function(data){
    if( data.condition )$('#myform').submit();
    else window.location = 'redirect.html';
  });
  return false;  
});

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

  $('#myform').submit(ev, function(){ 
       ev.preventDefault();
   ...

, но return false также должно работать.

1 голос
/ 06 марта 2012

Я не уверен, как называется getLogin()?И есть ли у вас кнопка типа <input type="submit" onclick="getLogin()">, которая отправляет форму.

Если это так, добавьте обработчик щелчка и внедрите там код, как показано ниже,

HTML:

<input type="submit" onclick="getLogin()" id="submit_btn">

JS:

$('#submit_btn').click (function (e) {
     e.preventDefault(); //this should stop the form submission.

     getLogin();
});
0 голосов
/ 06 марта 2012
function getLogin()
{
    var e = window.event;
    e.preventDefault();


    $username = ...
    ...

}
0 голосов
/ 06 марта 2012

Если обработчик не возвращает false, это либо логическая проблема ... или, скорее, ошибка, выдаваемая в обработчике до того, как код достигнет возврата

Попробуйте использовать event.preventDefault () перед другим кодом в обработчике

http://api.jquery.com/event.preventDefault/

0 голосов
/ 06 марта 2012

Почему бы вам просто не установить параметр действия правильно?

action="javascript:;"

Кстати: еще лучшим решением было бы установить для параметра действия значение $ (окно) .load (..),Зачем?Потому что, если вы хотите, чтобы форму можно было использовать при деактивации JS, это необходимо сделать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...