![]() |
|
Модераторы: Sardar, Aliance |
![]()
|
|
| Alex13 |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 280 Регистрация: 30.12.2005 Где: Новосибирск Репутация: нет Всего: 1 |
Собственно, задача такова: нужно с помощью слоев (дабы его потом красиво оформить) и JS сымитировать стандартный диалог confirm().
При чем, нужно сделать, чтобы из кода он вызывался точно так же, как и стандартный:
Как это все отрисовать правильно я уже знаю, а вот как правильно оформить div_confirm() не знаю :( Пока в голову приходить только такой алгоритм:
При нажатии кнопки в диалоге confirm_flag будет устанавливаться в 1 или 0 в зависимости от нажатой кнопки. Но все упирается в отсутствие нормальной реализации sleep() в JS :( Посоветуйте, как еще можно такую вещь реализовать? Это сообщение отредактировал(а) Alex13 - 4.1.2008, 14:22 -------------------- Самая страшная ошибка - это ошибка, не имеющая явных причин и конкретных последствий. Антисоциальный блог. |
||||
|
|||||
| ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 84 Всего: 386 |
imho, так - нереально...
А как насчет вот такого:
Ну а уж сам div-confirm в нужном месте это callback вызовет. -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! |
|||
|
||||
| Alex13 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 280 Регистрация: 30.12.2005 Где: Новосибирск Репутация: нет Всего: 1 |
ksnk, так, конечно, тоже можно, однако если функция, в которой используется div_confirm() достаточно сложная, то ее дробление превращается в натуральный геморрой.
А уж если div_confirm() используется в нескольких местах и притом в calback'e надо использовать значения, вычисленные до вызова div_confirm(), то это вообще никуда не годится :( -------------------- Самая страшная ошибка - это ошибка, не имеющая явных причин и конкретных последствий. Антисоциальный блог. |
|||
|
||||
| cruelangel |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 319 Регистрация: 12.9.2007 Репутация: 4 Всего: 8 |
это от непонимания принципов яваскрипта
|
|||
|
||||
| Alex13 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 280 Регистрация: 30.12.2005 Где: Новосибирск Репутация: нет Всего: 1 |
cruelangel, сдается мне, вы так говорите от непонимания того, чего я хочу.
Объясню на примере:
Суть выполняемых действий: 1) В ответ на некоторое действие пользователя, мы получаем некоторую информацию и что-то с нею делаем, причем делаем сложную и ресурсоемкую работу, которую категорически не хочется повторять еще раз 2) Смотрим на результаты: если они нас не устраивают, спрашиваем пользователя, что делать 3) В зависимости от решения пользователя мы хотим что-то еще сделать с той информацией. А вот тут-то и появляется принципиальный момент: переменная, которую мы старательно обсчитывали до запроса пользователю, была уничтожена в тот момент, когда завершила свое выполнение функция foo(). И мы до нее теперь никак дотянуться не можем. Что делать? Обсчитывать ее по второму кругу? Это не подходит - занятие это ресурсоемкое, да и условия с тех пор поменялись и результат может получиться совершенно не тот, который был изначально. => Вариант с callback'ом можно припасти на крайний случай, но в общем случае это далеко не самое лучшее решение. Уже вижу ехидный вопрос: "А что мешает объявить переменную calc вне функции, сделав ее глобальной? Тогда ее будет видно и в функции bar()". Отвечаю: "Во-первых, в реальном случае этих переменных, которые могут понадобиться при дальнейшей обработке может быть намного больше и объявлять их всех глобальными неудобно. Во-вторых, использование глобальных переменных во всех известных мне языках считается дурным тоном, что тоже немаловажно. Сомневаюсь, что в JS все наоборот". Так вот объясните мне, пожалуйста, где я неправильно понял принципы JS? С уважением. -------------------- Самая страшная ошибка - это ошибка, не имеющая явных причин и конкретных последствий. Антисоциальный блог. |
|||
|
||||
| cruelangel |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 319 Регистрация: 12.9.2007 Репутация: 4 Всего: 8 |
нет, ехидным будет ответ: http://www.google.com/search?ie=UTF-8&...1%8F+javascript
Это сообщение отредактировал(а) cruelangel - 5.1.2008, 22:22 |
|||
|
||||
| ksnk |
|
||||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 84 Всего: 386 |
cruelangel, экое, однако, утонченное ехидство! Послать читать про замыкание с примерами на каких-то совсем уж искусственных языках... ;-)
вот так - вполне себе заработает... внутри function (response){...} переменная calc все еще остается доступной!
Неправильно! Переменные в JS уничтожаются ТОЛЬКО когда они уже совсем никому не нужны ;) -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! |
||||
|
|||||
| smartov |
|
|||
![]() свой собственный ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4225 Регистрация: 2.2.2006 Где: NJ Репутация: 7 Всего: 259 |
Alex13, день добрый.
Начну с простого. Вы спрашиваете где неправильно поняли принципов javascript? Отвечаю: там, где пытаетесь программировать на яваскрипте, как на поточном языке. Яваскрипт - язык событийный. Поэтому про всякие sleep лучше сразу забыть. Есть всего пару исключений, которые блокируют поток яваскрипта - alert, confirm, prompt и может еще что-нибудь, что я забыл или не знаю. В остальном - событие-привязка-срабатывание. Вариант, предложенный ksnk сам не проверял ибо некрасивый подход, но могу предложить решить эту проблему так. Чего-то эта проблема задела. Посидел. Написал, как мне кажется, достаточно красиво (в смысле кода естественно). Местами я упростил себе работу можно было изящнее, но в общем думаю ясно.
|
|||
|
||||
| cruelangel |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 319 Регистрация: 12.9.2007 Репутация: 4 Всего: 8 |
smartov, слишком много кода ради такой простой вещи.
ksnk, исправилсо |
|||
|
||||
| ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 84 Всего: 386 |
Позвольте поинтересоваться - чем замыкание "некрасивее" Вашего вызова неанонимной функции с передачей ей сложным образом каких-то параметров?
-------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! |
|||
|
||||
| AKS |
|
|||
|
Участник форума ![]() ![]() Профиль Группа: Участник Сообщений: 725 Регистрация: 20.9.2006 Репутация: 27 Всего: 52 |
Кажется, что красиво? Чтобы не казалось, можно для начала проверить свой код с помощью JSLint. |
|||
|
||||
| Alex13 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 280 Регистрация: 30.12.2005 Где: Новосибирск Репутация: нет Всего: 1 |
cruelangel, спасибо за иронию, помогло
Оно было бы здорово, только в приведенном мною примере она-таки уничтожалась, хотя я и хотел ее потом использовать ;) smartov, спасибо за подробный ответ, навело на некоторые мысли AKS, если уж на то пошло, то ни один из приведенных примеров проверку не проходит... Это сообщение отредактировал(а) Alex13 - 6.1.2008, 10:22 -------------------- Самая страшная ошибка - это ошибка, не имеющая явных причин и конкретных последствий. Антисоциальный блог. |
|||
|
||||
| ksnk |
|
||||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 84 Всего: 386 |
Строчки 58-63 кода smartov можно переписать вот так
Ну и если саму комбинацию вычислительных процедур - строки 83-107 заменить на
Это сообщение отредактировал(а) ksnk - 6.1.2008, 11:19 -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! |
||||
|
|||||
| AKS |
|
|||
|
Участник форума ![]() ![]() Профиль Группа: Участник Сообщений: 725 Регистрация: 20.9.2006 Репутация: 27 Всего: 52 |
А я тут ни при чем. "Пошло" не от меня (я не писал нечто, вроде: "Ваша вариант - некрасивый подход, написал свой - получилось достаточно красиво"). Это, наверно, повод для того, чтобы задуматься и сделать выводы (для своей же пользы - чтобы извлечь кое-какую выгоду). |
|||
|
||||
| smartov |
|
||||
![]() свой собственный ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4225 Регистрация: 2.2.2006 Где: NJ Репутация: 7 Всего: 259 |
cruelangel,
Если присмотреться там ничего лишнего нет кроме усложнения в анонимной функции, как правильно сказал ksnk. Я вынес в объект - вот и все. А так все нужное. Еще и не хватает кой чего - не очень гут что приходится указывать message_id. Было б не облом избавился бы от этого параметра Позволю AKS,
Проверил. Кроме необязательных в принципе точек с запятыми и спорно лучшей литеральной нотации ничего нового он мне не рассказал. Что, в общем то, и следовало ожидать. Теперь не кажется что красиво. Теперь еще и уверен. ksnk, Вот тут да. Я даже не знаю зачем я там намутил. Чего-то помутнение наступило видать Добавлено: теперь я знаю почему так замутил. Еще раз пересмотрел то, что вы написали. В силу того, что программлю давно и суппортил кода достаточно у меня патологическая неприязнь к глобальным переменным. Параметры в функцию должны передаваться, а не быть глобальными. Глобальные переменные - зло.
Вы, наверное, хороший программист на яваскрипте, но мне кажется не совсем понимаете того, что код нужно разносить. Ваш код потом будет несуппортный, понимаете? Выискивать среди анонимных функций использующих глобальные переменные реализацию очень неудобно. Код должен быть логически разделен, а не написан как можно более коротко. Это сообщение отредактировал(а) smartov - 6.1.2008, 11:58 |
||||
|
|||||
![]()
|
| Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | JavaScript: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |