С проверкой формы: почему onsubmit = "functionname ()" вместо onsubmit = "functionname ()"? - PullRequest
45 голосов
/ 04 марта 2011

Вопрос довольно очевиден. Я не понимаю, что делает возврат в следующем коде:

<form onsubmit="return somefunction()">

Ответы [ 6 ]

56 голосов
/ 04 марта 2011

Требуется возврат, чтобы значение true / false передавалось событию отправки формы (которое ищет это и предотвращает отправку, если оно получает false).

Давайте посмотрим на некоторые стандартные JS:

function testReturn() { return false; }

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

...
testReturn()
...

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

...
var wasSuccessful = testReturn();
...

, то вы что-то сделали с возвращаемым значением.

То же самое относится к обработчикам onclick.Если вы просто вызываете функцию без возврата в onsubmit, то вы говорите: «Выполните это, но не предотвращайте событие, если оно возвращает false».Это способ сказать, выполнить этот код при отправке формы, но не позволяйте ему остановить событие.

После добавления возврата вы говорите, что то, что вы вызываете, должно определить, будет лисобытие (отправить) должно продолжаться.

Эта логика применяется ко многим событиям onXXXX в HTML (onclick, onsubmit, onfocus и т. д.).

14 голосов
/ 04 марта 2011

Расширение того, что говорит GenericTypeTea. Вот конкретный пример:

<form onsubmit="return false">

Приведенная выше форма не будет отправлена ​​, тогда как ...

<form onsubmit="false">

... ничего не делает, то есть форма отправит .

Без return, onsubmit не получает значения, а событие выполняется так же, как и без какого-либо обработчика.

11 голосов
/ 04 марта 2011

Возврат false из функции остановит продолжение события. То есть это остановит отправку формы.

т.е.

function someFunction()
{
    if (allow) // For example, checking that a field isn't empty
    {
       return true; // Allow the form to submit
    }
    else
    {
       return false; // Stop the form submitting
    }
}
4 голосов
/ 05 января 2016

Когда onsubmit (или любое другое событие) предоставляется как HTML-атрибут , строковое значение атрибута (например, «return validate ();») вводится как body фактической функции обработчика onsubmit при создании объекта DOM для элемента.

Вот краткое доказательство в консоли браузера:

var p = document.createElement('p');
p.innerHTML = '<form onsubmit="return validate; // my statement"></form>';
var form = p.childNodes[0];

console.log(typeof form.onsubmit);
// => function

console.log(form.onsubmit.toString());
// => function onsubmit(event) {
//      return validate(); // my statement
//    }

Таким образом, в случае, если ключевое слово return указано в введенном операторе; когда обработчик отправки запускается, возвращаемое значение, полученное от вызова функции validate, будет передано как возвращаемое значение обработчика отправки и, таким образом, вступит в силу при управлении поведением отправки формы.

Без предоставленного возврата в строке сгенерированный обработчик onsubmit не будет иметь явного оператора return, и при срабатывании он вернет undefined (возврат по умолчанию) независимо от того, вернет ли validate () значение true или ложь, и форма будет представлена ​​в обоих случаях.

4 голосов
/ 23 октября 2013

Код обработчика событий HTML ведет себя как тело функции JavaScript. Многие языки, такие как C или Perl, неявно возвращают значение последнего выражения, вычисленного в теле функции. JavaScript этого не делает, он отбрасывает его и возвращает неопределенное значение, если вы не укажете явное return EXPR .

0 голосов
/ 01 июня 2013
<script>
function check(){
    return false;
}
 </script>

<form name="form1" method="post" onsubmit="return check();" action="target">
<input type="text" />
<input type="submit" value="enviar" />

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