Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Присвоить значение перед отправкой формы, Передать в форме полученное значение 
:(
    Опции темы
Hashashin
Дата 12.10.2012, 10:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 60
Регистрация: 22.5.2008

Репутация: нет
Всего: нет



Доброго времени суток!
Мне необходимо, чтобы перед отправкой формы выполнялся скрипт, результат выполнения записывался в поле и форма успешно отправлялась.
Вот примерно что я делаю:
Код

<script type="text/javascript">
function doThis() {
        document.getElementById('mapsLat').value = '35.10';
        document.getElementById('mapsLng').value = '-20.50';
    }
</script>
<% using (Html.BeginForm())
       { %>

       <%=Html.HiddenFor(m => m.mapsLat)%>
       <%=Html.TextBoxFor(m => m.mapsLng)%>
    <input type="submit" value="Добавить место" class="buttonLink" name="submitButton" onclick="doThis()" />

<% } %>

Код ASP.NET MVC. Убрал все ненужное. Код работает, если сделать отдельную кнопку, которая будет только выполнять этот скрипт. Но ничего не выходит, если я пытаюсь выполнить скрипт при отправки формы.
PM MAIL   Вверх
Aliance
Дата 12.10.2012, 10:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 55
Всего: 137



Самое простое, сделать так:
заменить кнопку с submit на button, в функцию-обработчик кнопки передать ссылку на форму (this.form), после всех действий вызвать у переданного аргумента функцию-триггер submit()

ВАриант 2:
Если ничего не менять, то в функции-обработчике нужно получить событие, отменить действие по умолчанию (preventDefault) и после всех действий вручную опять же таки вызвать функцию-триггер submit(). Узнать как работать с событием можно узнать по ссылке в моей подписи.
PM MAIL WWW ICQ Skype   Вверх
Hashashin
Дата 12.10.2012, 11:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 60
Регистрация: 22.5.2008

Репутация: нет
Всего: нет



Сделал так:
Код

<script type="text/javascript">
function doThis(myForm) {
        document.getElementById('mapsLat').value = '35.10';
        document.getElementById('mapsLng').value = '-20.50';
        myForm.submit();
    }
</script>
<% using (Html.BeginForm())
       { %>
       <%=Html.HiddenFor(m => m.mapsLat)%>
       <%=Html.TextBoxFor(m => m.mapsLng)%>
    <input type="button" value="Добавить место" onclick="doThis(this.form)" />
<% } %>

На форме все отображается, но полученные данные не передаются.
Так же пробовал называть форму и выполнять document.myform.submit(); тоже ничего не получилось. Возможно проблема с MVC.
PM MAIL   Вверх
Aliance
Дата 12.10.2012, 14:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 55
Всего: 137



Цитата(Hashashin @  12.10.2012,  12:19 Найти цитируемый пост)
На форме все отображается, но полученные данные не передаются.

покажите разметку, генерируемую сервером, а не серверный код. Скорее всего проблема в отсутствии аттрибута name у полей.
PM MAIL WWW ICQ Skype   Вверх
Hashashin
Дата 15.10.2012, 09:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 60
Регистрация: 22.5.2008

Репутация: нет
Всего: нет



Нет, с разметкой все в порядке. Если я сначала нажму на кнопку, а потом отправлю фому, то все передается отлично.
Код

       <input id="mapsLat" name="mapsLat" type="hidden" value="" />
       <input id="mapsLng" name="mapsLng" type="text" value="" />

PM MAIL   Вверх
Aliance
Дата 15.10.2012, 10:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 55
Всего: 137



Цитата(Hashashin @  15.10.2012,  10:32 Найти цитируемый пост)
 Если я сначала нажму на кнопку, а потом отправлю фому, то все передается отлично.

Запутался. В чем тогда проблема? И разметку не полную скинули. интересует тег форм и его аттрибуты (action, method)
PM MAIL WWW ICQ Skype   Вверх
Hashashin
Дата 15.10.2012, 10:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 60
Регистрация: 22.5.2008

Репутация: нет
Всего: нет



Весь код большой, хочу оградить Вас от ненужных строк:
Код

<script type="text/javascript">
function doThis(myForm) {
        document.getElementById('mapsLat').value = '35.10';
        document.getElementById('mapsLng').value = '-20.50';
        myForm.submit();
    }
</script>
<form action="/trip" method="post">
       <input id="mapsLat" name="mapsLat" type="hidden" value="" />
       <input id="mapsLng" name="mapsLng" type="text" value="" />

        <input type="button" value="Добавить место" onclick="doThis(this.form)" />
    </form>


Т.е. если у меня 2 кнопки: одна заполняет эти инпуты, а вторая отправляет форму, то все работает прекрасно.
Если я привязываю это к одной кнопке, то ничего не выходит. Как уже писал выше, поля заполняются, а параметры не передаются.

Решил добавить к инпуту(который обязательно заполняется) событие onChange и пока оставить так. Просто не хотелось бы, чтобы функция выполнялась больше одного раза.
PM MAIL   Вверх
lomaster
Дата 15.10.2012, 11:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 101
Регистрация: 27.5.2012

Репутация: нет
Всего: 2



Почему у кнопки тип - button, а не сабмит?
PM   Вверх
Hashashin
Дата 15.10.2012, 11:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 60
Регистрация: 22.5.2008

Репутация: нет
Всего: нет



Цитата(lomaster @ 15.10.2012,  11:00)
Почему у кнопки тип - button, а не сабмит?

Потому что отправка формы в функции JavaScript. Как посоветовал мне Aliance
PM MAIL   Вверх
lomaster
Дата 15.10.2012, 11:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 101
Регистрация: 27.5.2012

Репутация: нет
Всего: 2



От типа это не зависит.
Код

<input type="submit" value="Добавить место" onclick="doThis()" />

если не надо чтобы срабатывал сабмит то
Код

<input type="submit" value="Добавить место" onclick="doThis(); return false;" />

либо
Код

function doThis() {
        document.getElementById('mapsLat').value = '35.10';
        document.getElementById('mapsLng').value = '-20.50';
        return false;
    }
<input type="submit" value="Добавить место" onclick="return doThis();" />


также у формы еще есть ивент onsubmit, который также вызывается перед отправкой, и в нем также можно "глушить" отправку.

А вот почему у вас не приходят на сервер данные, не понятно, тут надо смотреть код сервера, да и еще хорошо бы снифером посмотреть что и как уходит.

Это сообщение отредактировал(а) lomaster - 15.10.2012, 11:15
PM   Вверх
Aliance
Дата 15.10.2012, 13:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 55
Всего: 137



Hashashin, данный код есть в сети? Если да - ссылку дайте.

lomaster, отключите js и сравните 2 варианта, поймете разницу ;-)
PM MAIL WWW ICQ Skype   Вверх
lomaster
Дата 15.10.2012, 13:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 101
Регистрация: 27.5.2012

Репутация: нет
Всего: 2



Цитата(Aliance @  15.10.2012,  13:09 Найти цитируемый пост)
отключите js и сравните 2 варианта, поймете разницу ;-)
 Без js сама ветка не имеет смысла.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0795 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.