Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Разница в отправке формы
 
 автор: sim5   (07.01.2007 в 17:50)   письмо автору
 
 

Вопрос такой. В принципе, для самой формы разницы нет как я отправлю ее - либо кнопкой submit, либо из JS - submit(). Но вот если я, например, жду реакции на это событие на странице (ответа с сервера), куда будет напрвлен этот ответ, если форма отправлена из JS - в форму или скрипту? Условие - страница не перегружается при этом (почему это не столь важно).

   
 
 автор: Lelik   (07.01.2007 в 17:53)   письмо автору
 
   для: sim5   (07.01.2007 в 17:50)
 

в форме есть атрибут action, форма будет отправлена по-значению этого атрибута

   
 
 автор: sim5   (07.01.2007 в 18:00)   письмо автору
 
   для: Lelik   (07.01.2007 в 17:53)
 

Нет я не о том спрашиваю - action определяет цель на сервре. Меня интересует ответ с сервера - грубо говоря, куда он прийдет в моем примере.

   
 
 автор: Lelik   (07.01.2007 в 18:01)   письмо автору
 
   для: sim5   (07.01.2007 в 18:00)
 

скрипту-обработчику

   
 
 автор: sim5   (07.01.2007 в 18:07)   письмо автору
 
   для: Lelik   (07.01.2007 в 18:01)
 

Значит тут я правильно думал. Но тогда вопрос - как (перехватить) этот ответ и передать его по назначению?

   
 
 автор: Lelik   (07.01.2007 в 18:08)   письмо автору
 
   для: sim5   (07.01.2007 в 18:07)
 

не понял

   
 
 автор: sim5   (07.01.2007 в 18:17)   письмо автору
 
   для: Lelik   (07.01.2007 в 18:08)
 

Я не буду вновь делать ссылку на код ( а то softtime выставит мне счет "на правах рекламы"), коротко скажу. Форма имеет событие

onsubmit="this.setAttribute('target','myframe');"

где, myframe - это iframe. Если я отправляю форму кнокой Submit ответ с сервера будет загружен в этот контейнер. Страница при этом не перегружается, подобие XMLHttpRequest, но без использования оной. Если же я отправляю форму из JS, то ответ не загружается в контейнер, а печатается новая страница определяемая командой echo на сервере.
Что надо сделать в JS-функции, из которой отправляется форма, чтобы напрвить ответ сервера в требуемый контейнер?

   
 
 автор: Sergey89   (07.01.2007 в 18:10)   письмо автору
 
   для: sim5   (07.01.2007 в 18:07)
 

-

   
 
 автор: sim5   (07.01.2007 в 18:37)   письмо автору
553 байт
 
   для: Sergey89   (07.01.2007 в 18:10)
 

Луше будет так. Прицепил махонький архив. В нем два файла: test.php и test.html. Положить на локалку и запустить test.html. Из него можно отправить форму кнопкой Submit и в контейнер прийдет ответ, при этом страница не перезагружается. Отправить форму можно и, введя в поле text любой символ. Почувствуйте разницу как говориться. А тут я даже JS не использовал. Кто может объяснить причину этого?

   
 
 автор: RMW   (07.01.2007 в 19:06)   письмо автору
 
   для: sim5   (07.01.2007 в 18:37)
 

Событие submit происходит только при отправке формы
с кнопки type="submit", при вызове метода form.submit()
это событие соответственно не возникает.
Поэтому target лучше устанавливать заранее.
Или можно так:

<input type="button" value="submit" onclick="this.form.setAttribute('target','myframe');this.form.submit()">

   
 
 автор: sim5   (07.01.2007 в 19:50)   письмо автору
 
   для: RMW   (07.01.2007 в 19:06)
 

Ну в этом случае я должен нажимать кнопку Submit я понимаю. А мне как раз она и не нужна. Прописывая же onclick="this.form.setAttribute('target','myframe');this.form.submit()", например, как в примере в input "text" - ни получается.
Да и зачем переносить это this.form.setAttribute('target','myframe');this.form.submit()" в кнопку submit.

P.S. Нет извиняюсь, все работает теперь. Оказывается я ошибочку допустил.

Ну, а если отправку производить через JS.
Или если вообще удалить форму, а использовать только контейнеры и JS. Как в этом случае.

   
 
 автор: RMW   (07.01.2007 в 22:17)   письмо автору
 
   для: sim5   (07.01.2007 в 19:50)
 

> например, как в примере в input "text" - ни получается.
Ваш архив не смотрел, он у меня не открылся.

>Ну, а если отправку производить через JS.
Так а мы о чём :), устанавливаете target и делаете form.submit()
по любому событию и на любом элементе формы из тех которые вам нужны.

>Или если вообще удалить форму, а использовать только контейнеры и JS. Как в этом случае.
Если контейнер это iframe - изменяете свойство location, при этом чего-нибудь гетом можно
отправить. Например:
<iframe name="myframe"></iframe><br>
<textarea onblur="frames['myframe'].location.replace('http://localhost/.../index.asp?'+escape(this.value));"></textarea>

   
 
 автор: sim5   (08.01.2007 в 03:58)   письмо автору
 
   для: RMW   (07.01.2007 в 22:17)
 

Не знаю, но я архив свой открываю. Упаковка - RAR 3.51. Нет - отправка формы, и получение ответа в контейнер, любым ее элементом, теперь работает. Благодарю - ответ помог ошибку в коде обнаружить. Что касаемо последнего - немного не о том я говорил, но идея понравилась, может и можно будет приспособить. Попробую.

   
 
 автор: sim5   (08.01.2007 в 07:22)   письмо автору
 
   для: sim5   (08.01.2007 в 03:58)
 

Прикрепил то, что в итоге должно быть (пример). Перед отправкой формы, производится проверка ввода в поле. Отсылаться должны только цифры. Так как в примере - это получается со второго события. Вот тут у меня тяму в JS не хватает. Подскажите как правильно прописать, чтобы работало сразу.

Обработка же типа отсылаемых данных на сервере непойдет. Это для страницы выбора товаров, в которой контейнер будет служить корзиной, и отображаться в другом месте страницы. Надо непосредственно на странице "вырезать" недопустимые введенные символы. Кто силен в рег. выражениях в JS - может упростить JS-функцию проверки.

   
 
 автор: RMW   (08.01.2007 в 18:12)   письмо автору
 
   для: sim5   (08.01.2007 в 07:22)
 

Попробуйте так:

function checkCurr (curr){
curr.value = curr.value.replace(/[^0-9]/g,'');
}

   
 
 автор: sim5   (08.01.2007 в 18:22)   письмо автору
 
   для: RMW   (08.01.2007 в 18:12)
 

Большущее спасибо, но мне надо так чтобы если в первой позии строки 0 он вырезался при вводе, а учитывались только полсе 1,2..и т.д. Ох как завидую джавистам.

   
 
 автор: RMW   (08.01.2007 в 19:38)   письмо автору
 
   для: sim5   (08.01.2007 в 18:22)
 

Попробуйте ещё так:

curr.value = curr.value.replace(/\D|^0+/g,'');

   
 
 автор: sim5   (08.01.2007 в 20:12)   письмо автору
 
   для: RMW   (08.01.2007 в 19:38)
 

Благодарю. Попробую.

   
 
 автор: sim5   (08.01.2007 в 21:16)   письмо автору
 
   для: sim5   (08.01.2007 в 20:12)
 

Тоесть вместо всего длинного, что я в примере прописал вставляем это:

curr.value.replace(/\D|^0+/g,'')

Так не работает, и цифры все, и буквы прпускает.

   
 
 автор: RMW   (08.01.2007 в 21:45)   письмо автору
 
   для: sim5   (08.01.2007 в 21:16)
 

В функции конечно.
function checkCurr (curr){
curr.value = curr.value.replace(/\D|^0+/g,'');
}
Короче на данный момент могу предложить
такой вариант:)

function checkCurr (curr){
curr.value = curr.value.replace(/\D/g,'');
curr.value = curr.value.replace(/^0+/,'');
}

Из недостатков: курсор каждый
раз прыгает к концу строки, для редактирования строки
нужно курсор ставить мышем.

   
 
 автор: sim5   (08.01.2007 в 22:07)   письмо автору
 
   для: RMW   (08.01.2007 в 21:45)
 

Ну понятно, что в функции, чето не пашет. Может опять что-то неправильно или следы старого гдето остались - все в куче, в спешке. Сейчас еще посмотрю. И че с мышеМ.

   
 
 автор: sim5   (08.01.2007 в 22:09)   письмо автору
 
   для: sim5   (08.01.2007 в 22:07)
 

Нет не вырезает - ну тоесть вообще не реагирует на ввод, что хочу то и пишу. Все старое заремировано - не мешает.

   
 
 автор: RMW   (08.01.2007 в 23:49)   письмо автору
 
   для: sim5   (08.01.2007 в 22:09)
 

Предложу очередную редакцию:) курсор в IE не скачет при нажатии на клаве
стрелок влево и вправо.

> вообще не реагирует на ввод
В этом примере реагирует:

<html>

<script>
function checkCurr (curr){
  if(window.event)
  {
    if(event.keyCode == 37 || event.keyCode == 39)return;
  } 
  curr.value = curr.value.replace(/\D/g,'').replace(/^0+/,''); 
}
</script>

<form>
<input type="text" onkeyup="checkCurr(this)">
</form>

</html>

   
 
 автор: sim5   (09.01.2007 в 00:04)   письмо автору
 
   для: RMW   (08.01.2007 в 23:49)
 

Благодарю, завтра (вернее позже) попробую, а то глаза вылазят - у нас утро, 6 часов.

   
 
 автор: 12345   (09.01.2007 в 06:08)   письмо автору
 
   для: sim5   (09.01.2007 в 00:04)
 

(дубль)

   
 
 автор: 12345   (09.01.2007 в 06:10)   письмо автору
 
   для: sim5   (09.01.2007 в 00:04)
 

sim5: Вы как-то неясно выражаетесь, трудно понять. Может быть, нужно то, что в примере 2 на странице http://javascript.aho.ru/subs/subs005xmp.shtml ?

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

   
 
 автор: sim5   (09.01.2007 в 10:27)   письмо автору
 
   для: 12345   (09.01.2007 в 06:10)
 

Из этой ссылки я ничего не понял - решения примеров. Где они?

Все это:



  if(window.event) 
  { 
    if(event.keyCode == 37 || event.keyCode == 39)return; 
  }  
  curr.value = curr.value.replace(/\D/g,'').replace(/^0+/,'');  




работает отлично, благодарю, то что и нужно было. К сожалению кроме NS.

Согласен, вначале было слово. Пример который я прекрепил к вопросу - это тот же AJAX, но без оного. Проблема была в том, что работало это только при отправке формы кнопкой. А если из скрипта, то я не получал ответа в требуемое место.

   
 
 автор: 12345   (09.01.2007 в 11:11)   письмо автору
 
   для: sim5   (09.01.2007 в 10:27)
 

> А если из скрипта, то я не получал ответа в требуемое место.
Ну правильно, это совпадает с моим утверждением:). Если перед отправкой скриптом сделать присваивание action, как в обработчике onsubmit, то пойдёт куда надо.

> решения примеров. Где они?
В коде HTML, естественно. Или в статье, которая к этим примерам. Если устраивает поведение примеров, то смотрите код.

   
 
 автор: sim5   (09.01.2007 в 12:08)   письмо автору
 
   для: 12345   (09.01.2007 в 11:11)
 

1. Ну я так и делал (как в onsubmit), ответ уходил куда надо, а ответ не куда надо приходил.

2. Понял, просто не догадался посмотреть код страницы.

   
 
 автор: 12345   (09.01.2007 в 13:18)   письмо автору
 
   для: sim5   (09.01.2007 в 12:08)
 

1.Вот так?
имя_формы.target='имя.фрейма';имя_формы.submit();

Не в другом порядке? так должно работать, точнее, если грамотно,
document.forms.имя_формы.target='имя.фрейма';document.forms.имя_формы.submit();

   
 
 автор: sim5   (09.01.2007 в 14:43)   письмо автору
 
   для: 12345   (09.01.2007 в 13:18)
 

Да, так и прописывал
document.forms.имя_формы.target='имя.фрейма';document.forms.имя_формы.submit();
Отправка происходит, а вместо ответа печатает новую страницу. Тоесть ответ приходит не в требуемый контейнер.
А вот NS после выше предложенного - вобще перестал обрабатывать код.
Тоесть
<INPUT name="item[{$ix}]" onkeyup="checkCurr(this); this.form.setAttribute('target','cartinfo');this.form.submit()">
не приводит к отправке данных на сервер, и не нет ответа с сервера, даже если я исключу запрос checkCurr(this); из input. А если отправлю форму кнопкой Submit - оживает и работает.
NS версия 6.2.

   
 
 автор: 12345   (09.01.2007 в 15:23)   письмо автору
 
   для: sim5   (09.01.2007 в 14:43)
 

Про NS отдельный вопрос, может общий. Вроде бы setAttribute должен понимать. Если скрипт не успевает выставить html-атрибут, попробуйте сделать сабмит через задержку (1-10 мс). Насколько я помню, у меня подобное выставление (action) удавалось без задержки. Но везде, где работа идёт с передачей данных от одной подсистемы браузера другой (в данном случае - из JS в HTML), возможны нестыковки процессов, которые лечатся задержкой.

   
 
 автор: sim5   (09.01.2007 в 15:47)   письмо автору
 
   для: 12345   (09.01.2007 в 15:23)
 

К сожалению задержка не пойдет. Это магазин и в input пользователь выбирает некоторое число товаров. Товаров на странице как минимум 10 шт. Уже сейчас, при вводе, заметна задержка (видимо тут JS-функция лепту свою добавляет), плюс наблюдается задержка ответа от сервера, хотя этот же код я использовал на других страницах. А там данные ответа гораздо больше, но задержки практически не видно. Если еще принудительно добавить задержку.....
NS понимает setAttribute, но если отправка из Submit button, и setAttribute прописан в onsubmit формы. Че же он из элемента формы этого не понимает?
Был бы это не форум по программированию - высказал бы я свое мнение по бардаку с этими браузерами.

   
 
 автор: 12345   (09.01.2007 в 17:17)   письмо автору
 
   для: sim5   (09.01.2007 в 15:47)
 

Нет, не надо так бросаться единственной возможностью поправить положение. :) Задержка 1-10 мс - чисто символическая, но иногда она настоятельно необходима. Если так уж важно экономия миллисекунд, впоследствии первую часть выражения можно попробовать перенести вперёд, перед другими действиями. Если сработает.

   
 
 автор: sim5   (09.01.2007 в 18:28)   письмо автору
 
   для: 12345   (09.01.2007 в 17:17)
 

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

   
 
 автор: sim5   (10.01.2007 в 09:08)   письмо автору
 
   для: sim5   (09.01.2007 в 18:28)
 

Разобрался. Не надо вносить ни каких дополнительных задержек, я наоборот подчистил все. Сейчас просто класненько и быстренько все работает.
А NS не хочет работать потому, что функцию проверки ввода checkCurr(curr), я не прописываю на странице - это подключаемый JS, если прописать функцию на странице - все нормально. Почему? Как мне заставить NS выполнять эту функцию из подключаемого JS-файла.

   
 
 автор: sim5   (10.01.2007 в 13:05)   письмо автору
 
   для: sim5   (10.01.2007 в 09:08)
 

Получу ли я на последний вопрос этого романа ответ?
Все - тема закрыта, благодарю.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования