|
|
|
| Вопрос такой. В принципе, для самой формы разницы нет как я отправлю ее - либо кнопкой submit, либо из JS - submit(). Но вот если я, например, жду реакции на это событие на странице (ответа с сервера), куда будет напрвлен этот ответ, если форма отправлена из JS - в форму или скрипту? Условие - страница не перегружается при этом (почему это не столь важно). | |
|
|
|
|
|
|
|
для: sim5
(07.01.2007 в 17:50)
| | в форме есть атрибут action, форма будет отправлена по-значению этого атрибута | |
|
|
|
|
|
|
|
для: Lelik
(07.01.2007 в 17:53)
| | Нет я не о том спрашиваю - action определяет цель на сервре. Меня интересует ответ с сервера - грубо говоря, куда он прийдет в моем примере. | |
|
|
|
|
|
|
|
для: sim5
(07.01.2007 в 18:00)
| | скрипту-обработчику | |
|
|
|
|
|
|
|
для: Lelik
(07.01.2007 в 18:01)
| | Значит тут я правильно думал. Но тогда вопрос - как (перехватить) этот ответ и передать его по назначению? | |
|
|
|
|
|
|
|
для: sim5
(07.01.2007 в 18:07)
| | не понял | |
|
|
|
|
|
|
|
для: Lelik
(07.01.2007 в 18:08)
| | Я не буду вновь делать ссылку на код ( а то softtime выставит мне счет "на правах рекламы"), коротко скажу. Форма имеет событие
onsubmit="this.setAttribute('target','myframe');"
где, myframe - это iframe. Если я отправляю форму кнокой Submit ответ с сервера будет загружен в этот контейнер. Страница при этом не перегружается, подобие XMLHttpRequest, но без использования оной. Если же я отправляю форму из JS, то ответ не загружается в контейнер, а печатается новая страница определяемая командой echo на сервере.
Что надо сделать в JS-функции, из которой отправляется форма, чтобы напрвить ответ сервера в требуемый контейнер? | |
|
|
|
|
|
|
|
для: sim5
(07.01.2007 в 18:07)
| | - | |
|
|
|
|
 553 байт |
|
|
для: Sergey89
(07.01.2007 в 18:10)
| | Луше будет так. Прицепил махонький архив. В нем два файла: test.php и test.html. Положить на локалку и запустить test.html. Из него можно отправить форму кнопкой Submit и в контейнер прийдет ответ, при этом страница не перезагружается. Отправить форму можно и, введя в поле text любой символ. Почувствуйте разницу как говориться. А тут я даже JS не использовал. Кто может объяснить причину этого? | |
|
|
|
|
|
|
|
для: 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()">
|
| |
|
|
|
|
|
|
|
для: 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. Как в этом случае. | |
|
|
|
|
|
|
|
для: 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>
|
| |
|
|
|
|
|
|
|
для: RMW
(07.01.2007 в 22:17)
| | Не знаю, но я архив свой открываю. Упаковка - RAR 3.51. Нет - отправка формы, и получение ответа в контейнер, любым ее элементом, теперь работает. Благодарю - ответ помог ошибку в коде обнаружить. Что касаемо последнего - немного не о том я говорил, но идея понравилась, может и можно будет приспособить. Попробую. | |
|
|
|
|
|
|
|
для: sim5
(08.01.2007 в 03:58)
| | Прикрепил то, что в итоге должно быть (пример). Перед отправкой формы, производится проверка ввода в поле. Отсылаться должны только цифры. Так как в примере - это получается со второго события. Вот тут у меня тяму в JS не хватает. Подскажите как правильно прописать, чтобы работало сразу.
Обработка же типа отсылаемых данных на сервере непойдет. Это для страницы выбора товаров, в которой контейнер будет служить корзиной, и отображаться в другом месте страницы. Надо непосредственно на странице "вырезать" недопустимые введенные символы. Кто силен в рег. выражениях в JS - может упростить JS-функцию проверки. | |
|
|
|
|
|
|
|
для: sim5
(08.01.2007 в 07:22)
| | Попробуйте так:
function checkCurr (curr){
curr.value = curr.value.replace(/[^0-9]/g,'');
}
|
| |
|
|
|
|
|
|
|
для: RMW
(08.01.2007 в 18:12)
| | Большущее спасибо, но мне надо так чтобы если в первой позии строки 0 он вырезался при вводе, а учитывались только полсе 1,2..и т.д. Ох как завидую джавистам. | |
|
|
|
|
|
|
|
для: sim5
(08.01.2007 в 18:22)
| | Попробуйте ещё так:
curr.value = curr.value.replace(/\D|^0+/g,'');
|
| |
|
|
|
|
|
|
|
для: RMW
(08.01.2007 в 19:38)
| | Благодарю. Попробую. | |
|
|
|
|
|
|
|
для: sim5
(08.01.2007 в 20:12)
| | Тоесть вместо всего длинного, что я в примере прописал вставляем это:
curr.value.replace(/\D|^0+/g,'')
Так не работает, и цифры все, и буквы прпускает. | |
|
|
|
|
|
|
|
для: 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+/,'');
}
|
Из недостатков: курсор каждый
раз прыгает к концу строки, для редактирования строки
нужно курсор ставить мышем. | |
|
|
|
|
|
|
|
для: RMW
(08.01.2007 в 21:45)
| | Ну понятно, что в функции, чето не пашет. Может опять что-то неправильно или следы старого гдето остались - все в куче, в спешке. Сейчас еще посмотрю. И че с мышеМ. | |
|
|
|
|
|
|
|
для: sim5
(08.01.2007 в 22:07)
| | Нет не вырезает - ну тоесть вообще не реагирует на ввод, что хочу то и пишу. Все старое заремировано - не мешает. | |
|
|
|
|
|
|
|
для: 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>
|
| |
|
|
|
|
|
|
|
для: RMW
(08.01.2007 в 23:49)
| | Благодарю, завтра (вернее позже) попробую, а то глаза вылазят - у нас утро, 6 часов. | |
|
|
|
|
|
|
|
для: sim5
(09.01.2007 в 00:04)
| | (дубль) | |
|
|
|
|
|
|
|
для: sim5
(09.01.2007 в 00:04)
| | sim5: Вы как-то неясно выражаетесь, трудно понять. Может быть, нужно то, что в примере 2 на странице http://javascript.aho.ru/subs/subs005xmp.shtml ?
А вначале речь, видимо, шла о том, что если выхзывается отправка формы скриптом, то обработчик прерывания не выполняется. Да, это так, и если он нужен, его явно выполняют перед методом отправки формы. | |
|
|
|
|
|
|
|
для: 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, но без оного. Проблема была в том, что работало это только при отправке формы кнопкой. А если из скрипта, то я не получал ответа в требуемое место. | |
|
|
|
|
|
|
|
для: sim5
(09.01.2007 в 10:27)
| | > А если из скрипта, то я не получал ответа в требуемое место.
Ну правильно, это совпадает с моим утверждением:). Если перед отправкой скриптом сделать присваивание action, как в обработчике onsubmit, то пойдёт куда надо.
> решения примеров. Где они?
В коде HTML, естественно. Или в статье, которая к этим примерам. Если устраивает поведение примеров, то смотрите код. | |
|
|
|
|
|
|
|
для: 12345
(09.01.2007 в 11:11)
| | 1. Ну я так и делал (как в onsubmit), ответ уходил куда надо, а ответ не куда надо приходил.
2. Понял, просто не догадался посмотреть код страницы. | |
|
|
|
|
|
|
|
для: sim5
(09.01.2007 в 12:08)
| | 1.Вот так?
имя_формы.target='имя.фрейма';имя_формы.submit();
Не в другом порядке? так должно работать, точнее, если грамотно,
document.forms.имя_формы.target='имя.фрейма';document.forms.имя_формы.submit(); | |
|
|
|
|
|
|
|
для: 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. | |
|
|
|
|
|
|
|
для: sim5
(09.01.2007 в 14:43)
| | Про NS отдельный вопрос, может общий. Вроде бы setAttribute должен понимать. Если скрипт не успевает выставить html-атрибут, попробуйте сделать сабмит через задержку (1-10 мс). Насколько я помню, у меня подобное выставление (action) удавалось без задержки. Но везде, где работа идёт с передачей данных от одной подсистемы браузера другой (в данном случае - из JS в HTML), возможны нестыковки процессов, которые лечатся задержкой. | |
|
|
|
|
|
|
|
для: 12345
(09.01.2007 в 15:23)
| | К сожалению задержка не пойдет. Это магазин и в input пользователь выбирает некоторое число товаров. Товаров на странице как минимум 10 шт. Уже сейчас, при вводе, заметна задержка (видимо тут JS-функция лепту свою добавляет), плюс наблюдается задержка ответа от сервера, хотя этот же код я использовал на других страницах. А там данные ответа гораздо больше, но задержки практически не видно. Если еще принудительно добавить задержку.....
NS понимает setAttribute, но если отправка из Submit button, и setAttribute прописан в onsubmit формы. Че же он из элемента формы этого не понимает?
Был бы это не форум по программированию - высказал бы я свое мнение по бардаку с этими браузерами. | |
|
|
|
|
|
|
|
для: sim5
(09.01.2007 в 15:47)
| | Нет, не надо так бросаться единственной возможностью поправить положение. :) Задержка 1-10 мс - чисто символическая, но иногда она настоятельно необходима. Если так уж важно экономия миллисекунд, впоследствии первую часть выражения можно попробовать перенести вперёд, перед другими действиями. Если сработает. | |
|
|
|
|
|
|
|
для: 12345
(09.01.2007 в 17:17)
| | Тут сам эффект садержки (как это у меня сейчас) чисто визуально, если можно так сказать, ну не очень приятно выглядит. Тоесть как бы, "видна" реакция на ввод. Я не против того чтобы поробовать все варианты, я думаю о том, чтобы это не раздражало пользователей, а это в основном женщины. | |
|
|
|
|
|
|
|
для: sim5
(09.01.2007 в 18:28)
| | Разобрался. Не надо вносить ни каких дополнительных задержек, я наоборот подчистил все. Сейчас просто класненько и быстренько все работает.
А NS не хочет работать потому, что функцию проверки ввода checkCurr(curr), я не прописываю на странице - это подключаемый JS, если прописать функцию на странице - все нормально. Почему? Как мне заставить NS выполнять эту функцию из подключаемого JS-файла. | |
|
|
|
|
|
|
|
для: sim5
(10.01.2007 в 09:08)
| | Получу ли я на последний вопрос этого романа ответ?
Все - тема закрыта, благодарю. | |
|
|
|