Подтвердить что ты не робот

С проверкой формы: почему onsubmit = "return functionname()" вместо onsubmit = "functionname()"?

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

<form onsubmit="return somefunction()">
4b9b3361

Ответ 1

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

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

function testReturn() { return false; }

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

...
testReturn()
...

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

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

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

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

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

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

Ответ 2

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

<form onsubmit="return false">

Вышеуказанная форма не отправит, тогда как...

<form onsubmit="false">

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

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

Ответ 3

Возврат 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

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

Ответ 5

Когда 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 предоставляется в заявленном выражении; когда запускается обработчик отправки, возвращаемое значение, полученное от вызова функции проверки, будет передано как возвращаемое значение обработчика отправки и, таким образом, вступит в силу для управления представлением представления формы.

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

Ответ 6

<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>