![]() |
|
Модераторы: 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 |
||||
|
|||||
| smartov |
|
|||
![]() свой собственный ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4225 Регистрация: 2.2.2006 Где: NJ Репутация: 7 Всего: 259 |
AKS,
ksnk, я только сейчас заметил что видимо задел кого-то своей опрометчивой фразой о некрасивом подходе. Дико извиняюсь, я не хотел никого обидеть. Тем не менее подход от этого уж простите, красивей не становится. Почему - я описал выше. Тут чисто профессиональное. Ничего личного. AKS, кстати о JSLint. Это конечно, вещь неплохая, своего рода лакмусовая бумажка. Но относиться к этому слишком серьезно - это все равно что всерьез говорить о том, что если html код не проходит w3c валидацию - то надо задуматься. Это недостаток, самом собой, лучше бы придерживаться стандартов, но во-первых, если в w3c еще все ясно, там стандарты есть, то JSLint руководствуется малопонятными мне правилами - например провозглашение массива как new Array() он считает проблемой, хотя это труъ w3c подход. И в любом случае, то, что будет корректно приниматься интерпретатором, не заставит исправить никакой верификатор. Именно поэтому большинству абсолютно плевать на w3c checker. Не говоря уж про JSLint. |
|||
|
||||
| ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 84 Всего: 386 |
Вообще-то он (JSLint), в частности, указал на несколько пременных, которые у вас совершенно неожиданно оказались глобальными ;-), Разносить что? Единое, насколько я понял из объяснений Alex13, вычислительное действо вы предлагаете разбить на несколько независимых процедур и утверждаете что получившегося франкенштейна будет легче "суппортить"? Добавлено через 10 минут и 57 секунд smartov, отношение к глобальным переменным какое-то одностороннее -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! |
|||
|
||||
| AKS |
|
||||||
|
Участник форума ![]() ![]() Профиль Группа: Участник Сообщений: 725 Регистрация: 20.9.2006 Репутация: 27 Всего: 52 |
Уверены? Попробую еще раз, подробней и с примерами (хотя если человек сопротивляется, то может и не помочь). Итак: Avoid Cluttering The Global Namespace Avoid using global variables Далее, необъявленные переменные:
Always Use 'var' Об этом:
и многом, многом другом: Code Conventions for the JavaScript Programming Language Бессмысленные операции:
Пока, думаю, достаточно. В случае положительного эффекта можно будет продолжить. P.S. Да, кстати, у меня тоже нет никаких личных мотивов - только для "оздоровления" j(ava)script'а... Это сообщение отредактировал(а) AKS - 6.1.2008, 12:46 |
||||||
|
|||||||
| Alex13 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 280 Регистрация: 30.12.2005 Где: Новосибирск Репутация: нет Всего: 1 |
В общем, спустя долгое время и после некоторых экспериментов у меня вышло вот так (html с примером использования прикрепляю в аттач):
Это сообщение отредактировал(а) Alex13 - 6.9.2008, 16:50 Присоединённый файл ( Кол-во скачиваний: 3 )
index.html.txt 1,25 Kb-------------------- Самая страшная ошибка - это ошибка, не имеющая явных причин и конкретных последствий. Антисоциальный блог. |
|||
|
||||
![]()
|
| Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | JavaScript: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |