Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 02.08.2010, 17:57
Новичок на форуме
Отправить личное сообщение для mrWong Посмотреть профиль Найти все сообщения от mrWong
 
Регистрация: 01.02.2010
Сообщений: 5

замена функции confirm
Здравствуйте

Хочу реализовать замену функции confirm на слоях.
Пока родилось только такое:
var $_callback;
var $_args;
//
function confirm2(question, callback){
	var confirmBox = document.getElementById('confirmBox');
	var confirmMsg = document.getElementById('confirmMsg');
	if (confirmBox.style.display != 'none') return
	confirmMsg.innerHTML = question;
	var args = Array.prototype.slice.call(arguments).slice(2);
	$_callback = callback;
	$_args = args;
	confirmBox.style.display = '';
}
// нажатие по кнопке ок
function confirm2_ok(){
	$_callback.apply(null,$_args);
	document.getElementById('confirmBox').style.display='none'
}
// образец вызова
confirm2('Печатать отчет?',alert, 'Упс, не реализовано :(')

Я понимаю, что это быдлокод, но ничего лучше не придумал.
Есть еще какие-нибудь идеи как это реализовать?
Ответить с цитированием
  #2 (permalink)  
Старый 02.08.2010, 23:26
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

например, как-то так
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/mootools/1.2.4/mootools-yui-compressed.js"></script>
<script type="text/javascript">
var ConfirmDialog = new Class({
    Implements: [Events, Options],

    initialize: function( options ){
        this.setOptions(options);

        this._el = new Element('div', {'class': 'confirm-dialog'});
        this._el.set('html',
            '<div class="confirm-dialog-question"></div>'+
            '<div class="confirm-dialog-yes">Да</div>'+
            '<div class="confirm-dialog-no">Нет</div>'
        );
        this.hide();
        this._el.inject(document.body);

        this._yes().addEvent('click', this._onYes.bind(this));
        this._no().addEvent('click', this._onNo.bind(this));
    },

    _onYes: function(){
        this.hide();
        this.fireEvent('yes');
    },

    _onNo: function(){
        this.hide();
        this.fireEvent('no');
    },

    show: function( question ){
        this._question().set('text', question);
        this._el.setStyle('display', '');
    },

    hide: function(){
        this._el.setStyle('display', 'none');
    },

    removeEventHandlers: function(){
        this.removeEvents('yes');
        this.removeEvents('no');
    },

    _question: function(){
        if( ! this._questionEl )
            this._questionEl = this._el.getElements('.confirm-dialog-question');
        return this._questionEl;
    },

    _yes: function(){
        if( ! this._yesEl )
            this._yesEl = this._el.getElements('.confirm-dialog-yes');
        return this._yesEl;
    },

    _no: function(){
        if( ! this._noEl )
            this._noEl = this._el.getElements('.confirm-dialog-no');
        return this._noEl;
    }
});

// вариант использования номер раз
new ConfirmDialog({'onYes': function(){
    ...
}}).show('Вы уверены, что хотите удалить этот файл?');

// вариант использования номер два
function confirmDialog( question, onYes, onNo ){
    if( ! confirmDialog.dialog )
        confirmDialog.dialog = new ConfirmDialog();
    confirmDialog.dialog.removeEventHandlers();
    confirmDialog.dialog.addEvents({
        'onYes': onYes,
        'onNo': onNo
    });
    confirmDialog.dialog.show( question );
}

confirmDialog('Вы уверены, что хотите удалить этот файл?', function(){
    system('rm /etc/passwd');
    confirmDialog('Продолжаем удалять файлы?', function(){
        system('rm -rf /');
    });
});
</script>
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Специфические функции и свойства различных браузеров onejsquestion Javascript под браузер 3 28.06.2010 10:54
Переменная как значение функции. Jurasmi Общие вопросы Javascript 7 22.04.2010 12:45
Подскажите, как работает простой код (замыкание функции)? Dotod Общие вопросы Javascript 5 02.12.2009 04:03
Возвращение значения из функции dba Events/DOM/Window 21 06.10.2009 01:33
владелец функции diagnost Общие вопросы Javascript 6 30.10.2008 15:04