Вернуться   Дизайнерский форум » ВЕБ-ПРОГРАММИРОВАНИЕ » HTML, CSS, JavaScript

Кнопка 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 не используется по причине архитектуры конкретного приложения.

Буду благодарен за советы!

Спасибо!
 
Старый 16.06.2008, 14:19
Ссылки
Старый 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
Цитата:
Сообщение от Makarenya Посмотреть сообщение
имперически
Империей проверяли?

Покажите пример.

А зачем вообще блокировать кнопку? Это какой-то бред, с которым я неоднократно сталкивался, работая в одной конторе. И однаждые неоднократно ругавлся, пытаясь много раз забить данные в форму (какой-то розыгрыш призов от пива -- надо было вводить код с этикеток).
 
Старый 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-запросы идут с разной скоростью и одновременно вряд ли успеют).

Ну, а чтобы быть абсолютно уверенным, что такого казуса не случится, можете использовать семафоры. Для того они и нужны.
 
Старый 20.06.2008, 16:05
Закрытая тема




Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
некоректно отображается меню в 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


Текущее время: 20:27. Часовой пояс GMT +4.

Реклама на форуме Условия размещения рекламы
Биржа ссылок Заработай на сайте!
Дизайнерский форум