|
|
|
| Мне надо, чтобы посетитель мог по ходу чтения нажимать кнопочки, отправляя оценки,
а страница при этом оставалась без изменений.
Как это делается? | |
|
|
|
|
|
|
|
для: Eugene77
(21.12.2007 в 17:14)
| | AJAX | |
|
|
|
|
|
|
|
для: coloboc66
(21.12.2007 в 17:52)
| | Или использование на странице невидимого фрейма/ифрейма, имя которого прописывается в атрибуте TARGET тега <FORM> | |
|
|
|
|
|
|
|
для: CNT
(22.12.2007 в 07:12)
| | Не слыхал про такое! Это вот так, что-ли?
<form target="my_frame">
<input type="text" name="text1"/>
</form>
<iframe name="my_frame" src="file.php" style="display:none"></iframe>
|
| |
|
|
|
|
|
|
|
для: coloboc66
(22.12.2007 в 09:19)
| | Лучше так:
<form action="скрипт обработчик" onsubmit="this.setAttribute('target','my_frame')">
<iframe name="my_frame" onload="передаем содержимое в целевой объкет" style="display:none"></iframe>
|
| |
|
|
|
|
|
|
|
для: sim5
(22.12.2007 в 09:53)
| | >Лучше так:
>
><form action="скрипт обработчик" onsubmit="this.setAttribute('target','my_frame')">
><iframe name="my_frame" onload="передаем содержимое в целевой объкет" style="display:none"></iframe>
>
|
Да, так работает, только капризничает немного при некоторых обстоятельствах.
Для пущей совместимости лучше добавить ещё и одноимённый id:
<form action="скрипт обработчик" onsubmit="this.setAttribute('target','my_frame')">
<iframe name="my_frame" id="my_frame" onload="передаем содержимое в целевой объкет" style="display:none"></iframe>
|
В целом, весьма многообещающая конструкция выходит.
Спаибо! | |
|
|
|
|
|
|
|
для: Eugene77
(22.12.2007 в 19:34)
| | Да ID, но действительно "капризничать" это код будет только в одном случае - если за участком кода формирования ответа сервера, следует продолжение скрипта с выводом в браузер, а вы выдав ответ, не закончите работу скрипта командой exit(). Собственно откуда этот пример, вы должны знать, если действительно читали ссылку, которую я давал ранее. | |
|
|
|
|
|
|
|
для: Eugene77
(22.12.2007 в 19:34)
| | Чем onsubmit="this.setAttribute('target','my_frame')" лучше простого target="my_frame", знает только участник sim5 - мне лично преимущества этого способа совсем не очевидны.
Наоборот, при использовании onsubmit для установки цели формы теряется возможность программного сабмита указанной формы, ибо onsubmit при использовании метода submit () не срабатывает, что и записано в документации: "The submit method does not invoke the onsubmit event handler."
Что до "капризничания"... то вижу всего одно ограничение: если вызываемая в атрибуте ACTION тега <FORM> программа сформирует страницу, на которой будет иметься объект, которому принудительно будет даваться фокус: тогда браузер выдаст ошибку "Не могу установить фокус на невидимом объекте". | |
|
|
|
|
|
|
|
для: CNT
(22.12.2007 в 23:31)
| | Это пример "ну очень простенького" AJAX. Форма посылает запрос, скрипт выдает ответ, при этом контейнером служит фрейм, а уж его содержимое, при получение контейнером, передается целевому объекту.
В случае, если после выдачи сервера ответа браузеру, будет продолжена работа скрипта с выдачей в браузер, то страница будет перезагружаться вновь, при этом естественно будет вновь распределяться память под объекты... Другими словами, контейнер для которого предназначется ответ сервера будет уничтожен, о чем и сообщит IE, успешно "завалившись". Запустив отладчик на клиенте, и просмотрев память на которую в ошибке будет ссылаться браузер, можно будет убедиться в этом. | |
|
|
|
|
|
|
|
для: CNT
(22.12.2007 в 23:31)
| | >Наоборот, при использовании onsubmit для установки цели формы теряется возможность программного сабмита указанной формы, ибо onsubmit при использовании метода submit () не срабатывает, что и записано в документации: "The submit method does not invoke the onsubmit event handler."
>
Собственно, с вот этим я и столкнулся на практике, но это не проблема - она легко обходится.
А преимущество Sim5 указал реальное: При таком подходе можно заставить работать форму однинаково при включенном JS и при выключенном. Только в одном случае подгружая что-то, а в другом случае перезагружая ясю форму.
To Sim5:
Да, я действительно обратился к вами рекомендованной статье.
Мне она понравилась, и из неё это решение.
Смущает одно в этой статье:
Валидатор говорит, что в XHTML transitional нет такого атрибута onsubmit у iframe.
То есть опять получается не полная совместимость.
Ваше мнение? | |
|
|
|
|
|
|
|
для: Eugene77
(23.12.2007 в 10:47)
| | Мне XHTML пока "не угрожает", поэтому равнодушное. :) | |
|
|
|
|
|
|
|
для: Eugene77
(23.12.2007 в 10:47)
| | >А преимущество Sim5 указал реальное: При таком подходе можно заставить работать форму однинаково при включенном JS и при выключенном. Только в одном случае подгружая что-то, а в другом случае перезагружая ясю форму.
Бредите?
Как при выключенном JS у вас выполнится то, что написано в кавычках в onsubmit - ведь там написан реальный код на яваскрипте? :-) | |
|
|
|
|
|
|
|
для: CNT
(23.12.2007 в 17:43)
| | >
>Бредите?
>Как при выключенном JS у вас выполнится то, что написано в кавычках в onsubmit - ведь там написан реальный код на яваскрипте? :-)
Может быть :)
Но не думаю, в том-то и дело, что не выполнится, и страница пойдёт загружаться с сервера.
А если JS включен, всё отработается без перезагрузки: Запрос с сервера уйдёт в iframe, и далее по сценарию ответ сервера отобразится точно так же, как если бы с него грузилась вся страница.
Это как раз и преимущество того подхода, о котором говорит Sim5.
Можно и JS и без него получать ровно одно.
Я так понял. | |
|
|
|
|
|
|
|
для: Eugene77
(23.12.2007 в 18:31)
| | Вы не все поняли или не проверяли весь код в действии. | |
|
|
|
|
|
|
|
для: sim5
(24.12.2007 в 05:50)
| | >Вы не все поняли или не проверяли весь код в действии.
Как раз вот закончил большущую форму,
в которой 4 кнопки запускают 4 разных обработчика, при том, что форма стоит на месте.
Единственно, что меня не вполне удовлетворяет так это то, что не удалось вписаться в рамки XHTML в восьми местах. Но, видимо, - не судьба...
Тестировал пока только на Опере, но с ней как раз и бывают проблемы в плане AJAX'а, как я понимаю. Так что у меня, наоборот, впечатление такое , как будто разобрался. | |
|
|
|
|
|
|
|
для: Eugene77
(24.12.2007 в 20:53)
| | Нет в Опере проблем в плане аякса, если правильно писать код. | |
|
|
|
|
|
|
|
для: coloboc66
(24.12.2007 в 23:07)
| | >Нет в Опере проблем в плане аякса, если правильно писать код.
Ну, мне видно не везёт - не попадалось на глаза ни разу рабочего кода для Оперы.
Если приведёте пример, с удовольствием посмотрю!
Чисто из любопытства и тяги к знаниям.
Спасибо всем за обсуждение! | |
|
|
|