|
Кнопка Back + disabled в Internet Explorer и в MozillaОбсуждение темы Кнопка Back + disabled в Internet Explorer и в Mozilla в разделе HTML, CSS, JavaScript, часть категории ВЕБ-ПРОГРАММИРОВАНИЕ; Добрый день! Стокнулся с маленькой проблемкой, которую необходимо решить. test1.html: <form name="fMain" method="post" action="test2.html"> <input type="hidden" name="justHidden" value="123" /> <input type="button" name="testButton" value="Test" ... |
|
Опции темы |
16.06.2008, 14:19 | #1 |
|
Добрый день!
Стокнулся с маленькой проблемкой, которую необходимо решить. test1.html: <form name="fMain" method="post" action="test2.html"> <input type="hidden" name="justHidden" value="123" /> <input type="button" name="testButton" value="Test" onClick="processAction();" /> </form> <script type="text/javascript"> function processAction() { document.fMain.testButton.disabled = true; alert("Pause"); document.fMain.submit(); } </script> test2.html <p>This is the result</p> После нажатия кнопки, она становится неактивной и загружается другая страница. В IE после нажатия кнопки Back форма test1.html отображается снова с активной кнопкой, а в Mozilla FF кнопка остаётся неактивной. Может у кого есть решение этой проблемы? Страничку test1.html заргужать заново нет возможности, а Ajax не используется по причине архитектуры конкретного приложения. Буду благодарен за советы! Спасибо! |
|
17.06.2008, 19:40 | #2 |
|
Я вам один умный вещь скажу. Не надо блокировать кнопку.
|
|
17.06.2008, 19:56 | #3 |
|
Можно при загрузке страницы включать эту кнопку средствами javascript!
сценарии выполняются всякий раз при появлении страницы. тем самым сведём поведение FF и IE к одному... |
|
18.06.2008, 12:28 | #4 |
|
При нажатии "Back" сценарий может не отработать, так как в нормальных браузерах страницы берутся из кэша.
|
|
18.06.2008, 14:43 | #5 |
|
да беруться, но сценарий отрабатывает (проверенно имперически на последних версиях браузеров)
|
|
19.06.2008, 22:28 | #6 |
|
Империей проверяли?
Покажите пример. А зачем вообще блокировать кнопку? Это какой-то бред, с которым я неоднократно сталкивался, работая в одной конторе. И однаждые неоднократно ругавлся, пытаясь много раз забить данные в форму (какой-то розыгрыш призов от пива -- надо было вводить код с этикеток). |
|
19.06.2008, 22:56 | #7 |
|
Империя наносит ответный удар
на самом деле смысл в следующим. если кнопка не блокируется, то её можно нажать 2 раза, что 2 раза запустит скрипт, которому теоритичеки надо бы запуститься тока один раз. если у вас присутствует механизм блокировки повторения исполнения средствами php, то он присутствует "не сразу", а включается на n-й строчке скрипта, такчто теоритически возможен вариант, что скрипт - таки исполниться 2 раза. Вообще задача синхронизации многопоточных приложений... хоть уж 2 года разрабатываю многопоточки, матерюсь до сих пор. *ваш кролик пишет* |
|
20.06.2008, 14:27 | #8 |
|
*написал
Что до двойных нажатий — очень легко это предотвратить программно. |
|
20.06.2008, 16:05 | #9 |
|
Хмм, не совсем так. Хотя возможно и так, я ещё не знаю всех тонкостей php.
Кароче, программно у нас получиться чтото вроде if (запрос с этой страницы ещё не был обработан) { помечаем запрос как обработанный выполняем запрос } по другому никак. Ну то есть можно и по другому, но полюбому у нас сначала идёт проверка, обработан ли запрос, а потом установка, что запрос обработан! НО. скрипты ведь выполняются в php параллельно! И существует хоть минимальный, но интервал времени, в течении которого скрипт решил обрабатывать запрос, НО ещё не установил его обработанным. В условиях парраллелизма второй скрипт может осуществить проверку на обработанность именно в этот интервал времени! и тоже пройдёт. Средств межпоточной блокировки в php я не видел, да и не нужны они там теоритически. Можно проводить проверку на обработанность, используя MySQL. $requestId = ... $me = rand(); UPDATE requests SET executed=1, owner=$me WHERE requestId=$requestId данная опирация будет межпоточно блокируемой, и к строке requestId=... второй скрипт не сможет обратиться (будет висеть) до того момента, покуда первый не отработает весь запрос UPDATE. после чего проверка SELECT requests WHERE requestId = $requestId AND owner=$me в результате которой один из скриптов поймёт, что он в пролёте. Ну примерно так. Хотя, возможно php предоставляет более подходящие средства.... Добавлено через 33 минуты в PHP есть семафоры, можно использовать их... Последний раз редактировалось Асмодиан; 20.06.2008 в 16:05.. Причина: Добавлено сообщение |
|
20.06.2008, 16:05 | #10 |
|
PHP тут ни при чём, алгоритм един для любых языков, и вы, в принципе, близко его описали.
Что до того случая, когда скрипт не успел установить, что форма уже обработана (и повторно обрабатывать не нужно), то эта ситуация абсолютно невероятна (HTTP-запросы идут с разной скоростью и одновременно вряд ли успеют). Ну, а чтобы быть абсолютно уверенным, что такого казуса не случится, можете использовать семафоры. Для того они и нужны. |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
некоректно отображается меню в Internet Explorer | shall | HTML, CSS, JavaScript | 0 | 28.04.2010 15:09 |
Тупой Internet Explorer | BleSSeD | HTML, CSS, JavaScript | 2 | 02.11.2009 13:02 |
Сайт во Flash и Internet Explorer | KompKiller | Технологии Flash | 4 | 23.02.2009 23:22 |
Баннер в Internet Explorer не показывается, Dreamweaver MX | effest | HTML, CSS, JavaScript | 1 | 01.04.2006 17:43 |
Internet Explorer 7 Beta 1 | kost | Кальянная | 5 | 03.08.2005 09:42 |
Реклама на форуме
Условия размещения рекламы
Биржа ссылок
Заработай на сайте!
|