Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Переадресация при onclick на submit (https://javascript.ru/forum/events/51551-pereadresaciya-pri-onclick-na-submit.html)

Boolean_Type 10.11.2014 22:28

Переадресация при onclick на submit
 
Есть код:
<form method='POST'>
<input type='text'>
<input type='submit' onclick = 'f();'>
</form>
<script>
function f () {
	document.location.href="http://yandex.ru";
}
</script>


Переадресации не происходит. Почему? Ведь сначала выполняется js-скрипт, и лишь затем - отправка данных на сервер, как, например, здесь:

<form method='POST' action='2.php'>
<input type='submit' onclick = 'f();'>
</form>
<script>
function f () {
	alert(1); //выдаст 1, затем - обработка данных скриптом '2.php' (т.е., по сути, редирект на '2.php')
}


А в коде ниже - происходит, если для submit прописать return false;
<form method='POST'>
<input type='text'>
<input type='submit' onclick = 'f();return false;'>
</form>
<script>
function f () {
	document.location.href="http://yandex.ru";
}
</script>


Объясните, пожалуйста.

danik.js 11.11.2014 04:38

<input type='button' onclick = 'f();'>

<script>
function f () {
    document.location.href="http://yandex.ru";
    document.location.href="http://google.com";
}
</script>


Куда происходит переход? Отправку формы браузером считай за невидимую тебе вторую строчку js-кода с редиректом.

Boolean_Type 11.11.2014 14:53

Ни хера не понял.
Тем более, в твоём примере баттон.
Так что там с моим кодом? :-) Объясни, пожалуйста, что происходит.

ksa 11.11.2014 14:59

Цитата:

Сообщение от Boolean_Type
<input type='submit' onclick = 'f();'>

Пофиг какой там у тебя "редирект" - все равно идет сабмит формы по ее action.

Цитата:

Сообщение от Boolean_Type
<input type='submit' onclick = 'f();return false;'>

Выполняется только скрипт... Форма не отправляется.

kostyanet 11.11.2014 15:27

В action формы и пишут урл куда она пойдет. Как это сделано во втором примере. Это НЕ редирект, это - цель - куда должен пойти запрос. Если экшн пустой, или вообще нет, то цель - URI. То есть текущий. Отправку формы можно запретить и послать на хуяндекс - но форма туда уже не придет.

kostyanet 11.11.2014 15:32

Понял, ТС пожизненно не видел action, поскольку практикуется примитивный паттерн редиректить на самого себя. Форма отгружается в тот же скрипт который ее сгенерил, а чтобы спина не была белая редиректит после записи на самого себя. Увидев action первый раз в жизни он и подумал - редирект!

Меж тем в экшон можно написать search string, а форму отгружать методом post и получать на сервере и то и другое одновременно.

<form action="/some/path/?some=value&an=other" method="post">

Boolean_Type 11.11.2014 15:32

Я понимаю, почему идёт переадресация на Яндекс, если есть "return false;". Но почему этот скрипт:
document.location.href="http://yandex.ru";

НЕ выполняется, если "return false;" нет?

ksa 11.11.2014 15:34

Цитата:

Сообщение от Boolean_Type
Но почему этот скрипт:
document.location.href="http://yandex.ru";
НЕ выполняется, если "return false;" нет?

Повторюсь...
Цитата:

Сообщение от ksa
Пофиг какой там у тебя "редирект" - все равно идет сабмит формы по ее action.


kostyanet 11.11.2014 15:37

Цитата:

Сообщение от Boolean_Type
НЕ выполняется, если "return false;" нет?

Звоните 03. 01 еще можно. Потому и не выполняется что нет return false. Про 01. Он что, думал можно отгрузить туда, а послать сюда? Типа поняли, да?

Boolean_Type 11.11.2014 15:51

Бля, ну потому и спросил, что не понял!:-/
Я же видел, что сначала js-скрипты выполняются, а потом отправка на сервер. Вот и удивился, думал, что переадресация по document.location.href раньше будет!


Часовой пояс GMT +3, время: 09:20.