jQuery - отменить отправку формы (используя «return false»?)? - PullRequest
9 голосов
/ 25 августа 2010

У меня проблемы с попыткой отменить отправку формы. Я следовал этому руководству (хотя я не делаю сценарий входа в систему), и, похоже, он работает для него.

Вот моя форма:

    <form action="index.php" method="post" name="pForm">
        <textarea name="comment" onclick="if(this.value == 'skriv här...') this.value='';" onblur="if(this.value.length == 0) this.value='skriv här...';">skriv här...</textarea>
        <input class="submit" type="submit" value="Publicera!" name="submit" />
    </form>

А вот и jquery:

$(document).ready(function() {
    $('form[name=pForm]').submit(function(){

        return false;

    });
});

Я уже импортировал jQuery в шапку и знаю, что он работает. Моей первой мыслью было, что это может быть устаревшим, но на самом деле это всего лишь год назад.

Так кто-нибудь видит, что не так?

Заранее спасибо.

РЕДАКТИРОВАТЬ: Из того, что я прочитал, самый простой и подходящий способ прервать отправку - это return false ? Но я не могу заставить его работать. Я искал на форуме, и я нашел несколько полезных тем, но ни одна из них на самом деле не работает. Я должен что-то напортачить.

Ответы [ 12 ]

11 голосов
/ 25 августа 2010

Попробуйте использовать event.preventDefault

$(document).ready(function(event) {
    $('form[name=pForm]').submit(function(event){
        event.preventDefault();
        //add stuff here
    });
});
9 голосов
/ 25 августа 2010

Спасибо всем за ответы!Мой друг попросил меня добавить

onsubmit="return(false)

в форму.Это работает, но я все еще хотел бы знать трюк не inline-javascript, который работает.

4 голосов
/ 22 сентября 2012

Вы указываете, что «предупреждение перед« return false »не отображается».

При использовании jQuery идентификатор или имя элемента submit не могут быть 'submit' - если это так, событие submit не будет запущено.

2 голосов
/ 13 февраля 2013

Форма, к которой вы пытаетесь получить доступ, может быть динамически добавлена ​​на вашу страницу.Вам нужно использовать делегат для доступа к этой форме в этом случае

Пример:

    $(document).delegate("#myform","submit",function(){
       return false;
});
2 голосов
/ 21 октября 2012

Просто мой скромный вклад в этот (без ответа, тоже устаревший) вопрос. Я уже несколько раз работал над этой проблемой с тем же решением:

Не использовать

<input name="submit" />

вместе с

$('form').submit(function(){...});

При этом запускается неправильный элемент / элемент, не приводя ни к ошибкам, ни к предупреждениям. Так что просто назовите кнопку «Отправить» как-нибудь еще, и все волшебным образом снова начнет работать.

2 голосов
/ 16 апреля 2011

У меня тоже была эта проблема, мой код (который не работал) был примерно таким:

$('#upload_form').submit(function(){ before_submit('argument') });

и внутри функции before_submit у меня было "return false", чтобы остановить отправку формы:

function before_submit() {

.........................................................
return false;
}

Я добавил "return" при привязке функции-обработчика события к форме, и это сработало:

$('#upload_form').submit(function(){ return before_submit('argument') });

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

2 голосов
/ 25 августа 2010

Должно работать нормально. Там, вероятно, больше в вопросе. К сожалению, код в вашем вопросе не имеет вкуса SSCCE , так что трудно определить причину. Возможно, вы вообще не импортировали библиотеку jQuery. Или вы позвонили $(document).ready() до импорта библиотеки jQuery. Или у вас есть другая библиотека JS, которая конфликтует $(). Или фактическая форма не имеет желаемого имени. Etc..etc ..

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

<!DOCTYPE html>
<html lang="en">
    <head>
        <title>SO question 3569072</title>
        <script src="http://code.jquery.com/jquery-latest.min.js"></script>
        <script>
            $(document).ready(function() {
                $('form[name=pForm]').submit(function() {
                    alert('Submit blocked!');
                    return false;
                });
            });
        </script>
    </head>
    <body>
        <form action="index.php" method="post" name="pForm">
            <textarea name="comment" onclick="if(this.value == 'skriv här...') this.value='';" onblur="if(this.value.length == 0) this.value='skriv här...';">skriv här...</textarea>
            <input class="submit" type="submit" value="Publicera!" name="submit" />
        </form>
    </body>
</html>

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

Несмотря на это, по моему мнению, будет стоить усилий, чтобы разобраться в некоторых базовых / тривиальных руководствах по jQuery (и предпочтительно также JavaScript), чтобы вы лучше поняли, что происходит под прикрытием, и научились использовать такие инструменты, как Firebug .

1 голос
/ 25 августа 2010

Значение имени требует кавычек вокруг него.Попробуйте это:

$(document).ready(function() {
    $("form[name='pForm']").submit(function(){
        return false;
    });
});
0 голосов
/ 04 июля 2018

Как насчет этого?

$('form[name=pForm]').on('submit',function()
{
    console.log("(^o^)");
    return false;
});
0 голосов
/ 10 мая 2014

Вы должны сделать своего рода «двойной возврат», или, другими словами, вы должны вернуть то, что возвращается.Итак, у вас есть html:

<form action="index.php" onsubmit="return cancelSubmit()" method="post" name="pForm">
    <textarea name="comment" onclick="if(this.value == 'skriv här...') this.value='';" onblur="if(this.value.length == 0) this.value='skriv här...';">skriv här...</textarea>
    <input class="submit" type="submit" value="Publicera!" name="submit" />
</form>

Чем просто у вас есть функция jquery с именем onsubmit, как вы видите выше:

function cancelSubmit() {
    return false; // return true if you want submission to carry through
}

Вы можете поставить любые условные выраженияв функции выше.Кажется, вы просто хотите отменить это все же.Надеюсь, что это поможет другим, кто сталкивается с этим ответом.

...