Приветствую всех.
Возник такой вопрос, как на время выполнения сделать кнопку disable.
Просто запись на диск файла размером 30 метров занимает определенное время, как можно узнать, что файл успешно закончился записываться на диск, а затем сделать enable button.
Всем спасибо за внимание.
RE: Disable buttons
От:
Аноним
Дата:
11.07.05 07:06
Оценка:
Приветствую всех.
Возник такой вопрос, как на время выполнения сделать кнопку disable.
Просто запись на диск файла размером 30 метров занимает определенное время, как можно узнать, что файл успешно закончился записываться на диск, а затем сделать enable button.
Всем спасибо за внимание.
Здравствуйте, Аноним, Вы писали:
А>Приветствую всех. А>Возник такой вопрос, как на время выполнения сделать кнопку disable. А>Просто запись на диск файла размером 30 метров занимает определенное время, как можно узнать, что файл успешно закончился записываться на диск, а затем сделать enable button. А>Всем спасибо за внимание.
на время выполнения чего? может все-таки на время от нажатия кнопки до получения ответа сервера? Тогда так:
Здравствуйте, Козьма Прутков, Вы писали:
КП>Здравствуйте, Аноним, Вы писали:
А>>Приветствую всех. А>>Возник такой вопрос, как на время выполнения сделать кнопку disable. А>>Просто запись на диск файла размером 30 метров занимает определенное время, как можно узнать, что файл успешно закончился записываться на диск, а затем сделать enable button. А>>Всем спасибо за внимание.
КП>на время выполнения чего? может все-таки на время от нажатия кнопки до получения ответа сервера? Тогда так: КП>
Сим>>А если с учетом клиентских валидаторов? Т.е. дизейблить страницу только если реально произойдет postback
M>валидаторы впишут свой код ПЕРЕД твоим. так что если они отвалятся до твоего не дойдет
Сейчас смотрил сгенеренный код, так там сперва идет мой код, а уж потом все остальное.
Кстати форма не постится вообще, ни в каком случае.
PS: ASP.NET 2.0
M>>валидаторы впишут свой код ПЕРЕД твоим. так что если они отвалятся до твоего не дойдет
Сим>Сейчас смотрил сгенеренный код, так там сперва идет мой код, а уж потом все остальное.
хм.. смотря где джобавляешь свой.... видимо позднее чем валидатор — он в пререндере кнопкию
Сим>Кстати форма не постится вообще, ни в каком случае.
Это да.. я еще не успел об это написать. Низя просто дизейблить кнопку в ее же обработчике. по выходу из обработчика тогда браузер посмотрит что кнопка дизаблед и не запостает форму. надо использовать window.setTimeout
Здравствуйте, mogadanez, Вы писали:
M>>>валидаторы впишут свой код ПЕРЕД твоим. так что если они отвалятся до твоего не дойдет
Сим>>Сейчас смотрил сгенеренный код, так там сперва идет мой код, а уж потом все остальное. M>хм.. смотря где джобавляешь свой.... видимо позднее чем валидатор — он в пререндере кнопкию
Сим>>Кстати форма не постится вообще, ни в каком случае.
M>Это да.. я еще не успел об это написать. Низя просто дизейблить кнопку в ее же обработчике. по выходу из обработчика тогда браузер посмотрит что кнопка дизаблед и не запостает форму. надо использовать window.setTimeout
M>
Сим>>Но в этом случае, все равно, если страница невалидна, то кнопка дизейблится
M>Да ты прав, в 2.0 они поменяли скрипты которые для кнопок вызываются... надо исследовать, буру таймаут
да намудрили товарищи. теперь кастомный код всегда впереди.
Варианты.
1. дизейблить кнопку в onsubmit
2. вставлять в onclick еще кусочек кода по валидации ( беее...... )
3. переопределять onclick на клиенте, отдельно стоящим скриптом а не в атрибуте.
var btn = document.getEleme......
var old_click = btn.onclick;
btn.onclick = function(e){ old_click; YOUR SCRIPT HERE; }
... << RSDN@Home 1.1.4 beta 6a rev. 436>>
Как на время выполнения сделать кнопку disable (ASP.NET 2.0)
А>Возник такой вопрос, как на время выполнения сделать кнопку disable. А>Просто запись на диск файла размером 30 метров занимает определенное время, как можно узнать, что файл успешно закончился записываться на диск, а затем сделать enable button.
Сим>>Но в этом случае, все равно, если страница невалидна, то кнопка дизейблится M>Да ты прав, в 2.0 они поменяли скрипты которые для кнопок вызываются... надо исследовать, буру таймаут
А>Возник такой вопрос, как на время выполнения сделать кнопку disable. А>Просто запись на диск файла размером 30 метров занимает определенное время, как можно узнать, что файл успешно закончился записываться на диск, а затем сделать enable button.
Сим>>>Но в этом случае, все равно, если страница невалидна, то кнопка дизейблится M>>Да ты прав, в 2.0 они поменяли скрипты которые для кнопок вызываются... надо исследовать, буру таймаут
OE>в 1.1 тот же эффект
здесь наверно должно быть Button2.Attributes иначе непонятно зачем нужен Button2 в примере (кстати, странный эффект получается, если оставить как есть — по нажатию на Button1 серятся все три кнопки сразу )
В IE6 все три метода функциклируют как надо, в FireFox (1.5.0.2) function on_load() срабатывает, btn находится, но все равно Button1 не disable-ся Кстати зачем нужно писать
var btn = document.getElementById("<%=Button1.ClientID%>");
OE>здесь наверно должно быть Button2.Attributes иначе непонятно зачем нужен Button2 в примере
по начальной задумке опечатка тут
var btn = document.getElementById("<%=Button2.ClientID%>");
OE>(кстати, странный эффект получается, если оставить как есть — по нажатию на Button1 серятся все три кнопки сразу )
хм... я такого не наблюдаю.
OE>В IE6 все три метода функциклируют как надо, в FireFox (1.5.0.2) function on_load() срабатывает, btn находится, но все равно Button1 не disable-ся Кстати зачем нужно писать
Ага... в ASPNET 1.1 клиентская валидация работает только на IE . такой вариант вроде везде работает
<script>
var root_ = this;
function on_load()
{
var btn = document.getElementById("<%=Button2.ClientID%>");
var old_onclick_handler = btn.onclick;
btn.onclick = function ()
{
if ( old_onclick_handler )
old_onclick_handler();
if ( "Page_IsValid"in root_ )
{
if ( Page_IsValid )
window.setTimeout( function (){btn.disabled = true;}, 10 );
else
return false;
}
else
window.setTimeout( function (){btn.disabled = true;}, 10 );
}
}
</script>
потому что енопка может лежать в каком нибудь NamingContainer'e например Repiter'e или UserControl
тогда ее ID на клиентской стороне будет _ctl0_Button1
Здравствуйте, mogadanez, Вы писали:
OE>>здесь наверно должно быть Button2.Attributes иначе непонятно зачем нужен Button2 в примере M>по начальной задумке опечатка тут M>
M> var btn = document.getElementById("<%=Button2.ClientID%>");
M>
подправил в оригинале
M>Ага... в ASPNET 1.1 клиентская валидация работает только на IE . такой вариант вроде везде работает
IE говорит "Microsoft JScript runtime error: 'root_' is undefined"
а FireFox кстати дальше if ( old_onclick_handler ) old_onclick_handler(); просто вообще не идет, я так понимаю он лезет за валидацией на сервер, ну и если все OK, выполняет код нажатия на кнопку, а потом страница загружается по новой.
Здравствуйте, Odi$$ey, Вы писали:
M>>Ага... в ASPNET 1.1 клиентская валидация работает только на IE . такой вариант вроде везде работает
OE>IE говорит "Microsoft JScript runtime error: 'root_' is undefined"
var root_ = this; точно добавил перед function on_load()?
OE>а FireFox кстати дальше if ( old_onclick_handler ) old_onclick_handler(); просто вообще не идет, я так понимаю он лезет за валидацией на сервер, ну и если все OK, выполняет код нажатия на кнопку, а потом страница загружается по новой.
не никуда он не лезет old_onclick_handler — старый клиентский обработчик.