Модераторы: Sardar, Aliance

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> confirm() на слоях. Как сымитировать? 
:(
    Опции темы
smartov
Дата 6.1.2008, 12:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


свой собственный
****


Профиль
Группа: Экс. модератор
Сообщений: 4225
Регистрация: 2.2.2006
Где: NJ

Репутация: 7
Всего: 259



AKS, 
ksnk, я только сейчас заметил что видимо задел кого-то своей опрометчивой фразой о некрасивом подходе. Дико извиняюсь, я не хотел никого обидеть. Тем не менее подход от этого уж простите, красивей не становится. Почему - я описал выше. Тут чисто профессиональное. Ничего личного.

AKS, кстати о JSLint. Это конечно, вещь неплохая, своего рода лакмусовая бумажка. Но относиться к этому слишком серьезно - это все равно что всерьез говорить о том, что если html код не проходит w3c валидацию - то надо задуматься. Это недостаток, самом собой, лучше бы придерживаться стандартов, но во-первых, если в w3c еще все ясно, там стандарты есть, то JSLint руководствуется малопонятными мне правилами - например провозглашение массива как new Array() он считает проблемой, хотя это труъ w3c подход. И в любом случае, то, что будет корректно приниматься интерпретатором, не заставит исправить никакой верификатор. Именно поэтому большинству абсолютно плевать на w3c checker. Не говоря уж про JSLint.
PM MAIL   Вверх
ksnk
Дата 6.1.2008, 12:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 84
Всего: 386



Цитата(smartov @  6.1.2008,  11:50 Найти цитируемый пост)
ничего нового он мне не рассказал

Цитата(smartov @  6.1.2008,  11:50 Найти цитируемый пост)
 Глобальные переменные - зло.

Вообще-то он (JSLint), в частности, указал на несколько пременных, которые у вас совершенно неожиданно оказались глобальными ;-),

Цитата(smartov @  6.1.2008,  11:50 Найти цитируемый пост)
не совсем понимаете того, что код нужно разносить.

Разносить что? Единое, насколько я понял из объяснений  Alex13, вычислительное действо вы предлагаете разбить на несколько независимых процедур и утверждаете что получившегося франкенштейна будет легче "суппортить"?

Добавлено через 10 минут и 57 секунд
smartov, отношение к глобальным переменным какое-то одностороннее smile Поправьте код так, как предложил я. Неужели количество глобальных переменных увеличилось?


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
AKS
Дата 6.1.2008, 12:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Участник форума
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 20.9.2006

Репутация: 27
Всего: 52



Цитата(smartov @  6.1.2008,  11:50 Найти цитируемый пост)
Теперь не кажется что красиво. Теперь еще и уверен.

Уверены? Попробую еще раз, подробней и с примерами (хотя если человек сопротивляется, то может и не помочь).
Итак:
Цитата(smartov @  6.1.2008,  00:03 Найти цитируемый пост)
к сожалению совсем без глобалок никуда

Avoid Cluttering The Global Namespace
Avoid using global variables

Далее, необъявленные переменные:
Цитата(smartov)

DivConfirm, sum

Always Use 'var'

Об этом:
Цитата(smartov)

this.params = new Array();
var params = new Array();

и многом, многом другом: 
Code Conventions for the JavaScript Programming Language

Бессмысленные операции:
Цитата(smartov)

this.callback = (function() {}); // !!!

this.div.style // !!! многократно повторяющийся доступ к одному и тому же объекту

params.push(calc1);
params.push(calc2); // !!! -> params.push(calc1, calc2)

new DivConfirm // !!! при вызове test каждый раз создается новый объект

Пока, думаю, достаточно. В случае положительного эффекта можно будет продолжить.

P.S. Да, кстати, у меня тоже нет никаких личных мотивов - только для "оздоровления" j(ava)script'а...

Это сообщение отредактировал(а) AKS - 6.1.2008, 12:46
PM MAIL   Вверх
Alex13
  Дата 6.9.2008, 16:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 280
Регистрация: 30.12.2005
Где: Новосибирск

Репутация: нет
Всего: 1



В общем, спустя долгое время и после некоторых экспериментов у меня вышло вот так (html с примером использования прикрепляю в аттач):

Код

/*
 * Cools dialog library
 * @author Alek$
 * @date 06-09-2008
 *
 * Thanks to ksnk, cruelangel and smartov
 */

var replace_alert = true    ;
var replace_confirm = false;
var replace_prompt = false;

// Main dialog logics is placed here
function BuildDialog(type, callback)
{
    var myself = this;
    
    //
    // Internal function
    //
    
    // Build common dialog elements
    this.basicDialog = function ()
    {
        // Create basic layer
        this.win = document.createElement('div');
        this.win.className = "popup_dialog";
        
        // Create header bar
        var headbar = document.createElement('div');
        headbar.className = "popup_headerbar";
        
            // Create header controls
            var controlClose = document.createElement('span');
            controlClose.className = "popup_control";
            controlClose.innerHTML = "X";
            controlClose.onclick = function()
            {
                myself.close();
                myself.callback(false);
            }
            headbar.appendChild(controlClose);
        
        this.win.appendChild(headbar);
        
        // Create text container
        this.cont = document.createElement('span');
        this.cont.className = "popup_content";
        this.win.appendChild(this.cont);
        
        // Add Escape handler
        
        this.win.onkeydown = function (e)
        {
            var keynum;
            if(window.event) keynum = event.keyCode;
            else if(e.which) keynum = e.which;
            
            if(keynum == 27)
            {
                myself.close();
                myself.callback(false);
            }
        }
    }
    
    // Build elements for alert dialog
    this.buildAlert = function ()
    {
        // Create button
        var buttonDiv = document.createElement('div');
        buttonDiv.className = "popup_buttons";
        
            // Create OK button
            var bOK = document.createElement('input');
            bOK.type = "button";
            bOK.value = "OK";
            bOK.onclick = function()
            {
                myself.close();
            }
            buttonDiv.appendChild(bOK);
        
        this.win.appendChild(buttonDiv);
        
        // Set focus function
        this.focus = function ()
        {
            bOK.focus();
        }
    }
    
    // Build elements for confirm dialog
    this.buildConfirm = function ()
    {
        // Create button
        var buttonDiv = document.createElement('div');
        buttonDiv.className = "popup_buttons";
        
            // Create OK button
            var bOK = document.createElement('input');
            bOK.type = "button";
            bOK.value = "OK";
            bOK.onclick = function()
            {
                myself.close();
                myself.callback(true);
            }
            buttonDiv.appendChild(bOK);
            
            // Create Cancel button
            var bCancel = document.createElement('input');
            bCancel.type = "button";
            bCancel.value = "Cancel";
            bCancel.onclick = function()
            {
                myself.close();
                myself.callback(false);
            }
            buttonDiv.appendChild(bCancel);
        
        this.win.appendChild(buttonDiv);
        
        // Set focus function
        this.focus = function ()
        {
            bOK.focus();
        }
    }
    
    // Build elements for prompt dialog
    this.buildPrompt = function ()
    {
        // Create input
        var textInput = document.createElement('input');
        this.win.appendChild(textInput);
        
        // Create button
        var buttonDiv = document.createElement('div');
        buttonDiv.className = "popup_buttons";
        
            // Create OK button
            var bOK = document.createElement('input');
            bOK.type = "button";
            bOK.value = "OK";
            bOK.onclick = function()
            {
                myself.close();
                myself.callback(textInput.value);
            }
            buttonDiv.appendChild(bOK);
            
            // Create Cancel button
            var bCancel = document.createElement('input');
            bCancel.type = "button";
            bCancel.value = "Cancel";
            bCancel.onclick = function()
            {
                myself.close();
                myself.callback(false);
            }
            buttonDiv.appendChild(bCancel);
        
        this.win.appendChild(buttonDiv);
        
        // Add Enter handler
        textInput.onkeydown = function (e)
        {
            var keynum;
            if(window.event) keynum = event.keyCode;
            else if(e.which) keynum = e.which;
            
            if(keynum == 13)
            {
                myself.close();
                myself.callback(textInput.value);
                return false;
            }
        }
        
        // Add specific function for seting text field value
        this.setValue = function (value)
        {
            textInput.value = value;
        }
        
        // Set focus function
        this.focus = function ()
        {
            bOK.focus();
        }
    }
    
    // Set dialog text
    this.setText = function (text)
    {
        this.cont.innerHTML = text;
    }
    
    // Display dialog
    this.show = function ()
    {
        document.body.appendChild(this.win);
        this.win.style.left = (document.body.clientWidth - 300)/2;
        this.win.focus();
        this.focus();
    }
    
    // Close dialog
    this.close = function ()
    {
        document.body.removeChild(this.win);
    }
    
    this.focus = function () {};
    
    //
    // Start building dialog
    //
    
    this.basicDialog();
    
    // Set callback function
    if(callback == null)
    {
        callback = function(result) {};
    }
    this.callback = callback;
    
    // Build specific elements for
    if(type == 'alert')
    {
        // alert
        this.buildAlert();
    }
    else if(type == 'confirm')
    {
        // confirm
        this.buildConfirm();
    }
    else if(type == 'prompt')
    {
        //prompt
        this.buildPrompt();
    }
}

// Main alert function
function myAlert (text)
{
    var win = new BuildDialog('alert', null);
    win.setText(text);
    win.show();
    //defaultAlert(text);
}

// Main confirm function
function myConfirm(text, callback)
{
    var win = new BuildDialog('confirm', callback);
    win.setText(text);
    win.show();
}

// Main prompt function
function myPrompt(text, value, callback)
{
    var win = new BuildDialog('prompt', callback);
    win.setText(text);
    win.setValue(value);
    win.show();
}


//
// Replace default functions
//

// Store default functions
window.defaultAlert = window.alert;
window.defaultConfirm = window.alert;
window.defaultPrompt = window.alert;

// Replace
if(replace_alert)
{
    window.alert = myAlert;
}
if(replace_confirm)
{
    window.confirm = myConfirm;
}
if(replace_prompt)
{
    window.prompt = myPrompt;
}


Это сообщение отредактировал(а) Alex13 - 6.9.2008, 16:50

Присоединённый файл ( Кол-во скачиваний: 3 )
Присоединённый файл  index.html.txt 1,25 Kb


--------------------
Самая страшная ошибка - это ошибка, не имеющая явных причин и конкретных последствий.
Антисоциальный блог.
PM WWW ICQ Jabber   Вверх
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0539 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.