jQuery Mobile оповещение / диалоги подтверждения

#dialog #jquery-mobile

#диалоговое окно #jquery-mobile

Вопрос:

Есть ли хорошее решение jQuery Mobile, похожее на Sencha, для оповещений и диалоговых окон подтверждения?

Ответ №1:

Да, плагин хорош. Однако, если вам не нужна полная функциональность, все равно гораздо легче запускать собственные простые диалоги. Я использую это:

 <div data-role="dialog" id="sure" data-title="Are you sure?">
  <div data-role="content">
    <h3 class="sure-1">???</h3>
    <p class="sure-2">???</p>
    <a href="#" class="sure-do" data-role="button" data-theme="b" data-rel="back">Yes</a>
    <a href="#" data-role="button" data-theme="c" data-rel="back">No</a>
  </div>
</div>
  

И это:

 function areYouSure(text1, text2, button, callback) {
  $("#sure .sure-1").text(text1);
  $("#sure .sure-2").text(text2);
  $("#sure .sure-do").text(button).on("click.sure", function() {
    callback();
    $(this).off("click.sure");
  });
  $.mobile.changePage("#sure");
}
  

Вы можете использовать их везде, где вам нужен диалог подтверждения:

 areYouSure("Are you sure?", "---description---", "Exit", function() {
  // user has confirmed, do stuff
});
  

Комментарии:

1. этот код, похоже, работает, однако попробуйте установить диалоговое окно, отменить, установить отмену, затем подтвердить. он подтвердит дважды. в основном продолжает запускать событие. почему?

2. это также не блокирует. если вы это сделаете areYouSure(<params here>);alert("blabla"); , это покажет диалоговое окно И предупреждение, в отличие от обычного предупреждения / подсказки javascript. Это верно для любой инструкции после вызова функции, а не только для оповещения…

3. Отличный способ, мне нравится стиль обратного вызова!

4. лучшей версией было бы сделать ее без разметки, т. е. document.добавьте html-код divs, у меня есть один для модального диалога. но не диалог «да» / «нет».

5. Хороший код, Питер. Именно то, что мне было нужно. Спасибо, что поделились. @aherrick, без вызова ‘off’ внутри функции вызов ‘on’ будет продолжать добавлять обработчики функций. JQM добавляет новый вызов функции каждый раз, когда вы вызываете ‘on’, поэтому вы вызываете ‘off’, чтобы удалить его по завершении. Я предполагаю, что, возможно, Питер добавил вызов «выключено» после вашего поста, или же вы сами удалили «выключено», что и создало проблему.

Ответ №2:

Этот плагин для jQM оформит окно подтверждения в стиле jQM

http://dev.jtsage.com/jQM-SimpleDialog/

РЕДАКТИРОВАТЬ : Этот плагин теперь был заменен SimpleDialog2, который можно найти здесь:

http://dev.jtsage.com/jQM-SimpleDialog/demos2/

Комментарии:

1. Этот плагин действительно потрясающий. Всплывающее диалоговое окно — это то, что я искал. Стоит посмотреть, если вы этого не знаете.

2. Если вам посчастливилось использовать Backbone, вот моя простая реализация derekzeng.me/blog/2013/12/11/diy-jqm-popup-dialog

Ответ №3:

Отличный код @ Peter, но чтобы не генерировать последовательные события, возможно, было бы лучше использовать unbind (), например:

 function areYouSure(text1, text2, button, callback) {
  $("#sure .sure-1").text(text1);
  $("#sure .sure-2").text(text2);
  $("#sure .sure-do").text(button).unbind("click.sure").on("click.sure", function() {
    callback(false);
    $(this).off("click.sure");
  });
  $.mobile.changePage("#sure");
}
  

Спасибо!

Ответ №4:

У меня была похожая проблема. Я хотел иметь простую в использовании функцию, подобную стандартной confirm() .

Поскольку диалоги устарели в jquery mobile 1.4 (документация), я решил создать свою собственную скрипку:

 function confirmDialog(text, callback) {
var popupDialogId = 'popupDialog';
$('<div data-role="popup" id="'   popupDialogId   '" data-confirmed="no" data-transition="pop" data-overlay-theme="b" data-theme="b" data-dismissible="false" style="max-width:500px;"> 
                    <div data-role="header" data-theme="a">
                        <h1>Question</h1>
                    </div>
                    <div role="main" class="ui-content">
                        <h3 class="ui-title">'   text   '</h3>
                        <a href="#" class="ui-btn ui-corner-all ui-shadow ui-btn-inline ui-btn-b optionConfirm" data-rel="back">Yes</a>
                        <a href="#" class="ui-btn ui-corner-all ui-shadow ui-btn-inline ui-btn-b optionCancel" data-rel="back" data-transition="flow">No</a>
                    </div>
                </div>')
    .appendTo($.mobile.pageContainer);
var popupDialogObj = $('#'   popupDialogId);
popupDialogObj.trigger('create');
popupDialogObj.popup({
    afterclose: function (event, ui) {
        popupDialogObj.find(".optionConfirm").first().off('click');
        var isConfirmed = popupDialogObj.attr('data-confirmed') === 'yes' ? true : false;
        $(event.target).remove();
        if (isConfirmed amp;amp; callback) {
            callback();
        }
    }
});
popupDialogObj.popup('open');
popupDialogObj.find(".optionConfirm").first().on('click', function () {
    popupDialogObj.attr('data-confirmed', 'yes');
});
  

}

Я заметил странное поведение, когда перенаправление / очистка окна выполнялось при нажатии кнопки «Да». Это начало работать в событии AfterClose, поэтому это немного сложно.

Вот демонстрация jsfiddle

Комментарии:

1. достаточно близко к тому, что я искал. в итоге я просто оставил определенный модальный параметр на странице, удалил первые несколько строк вместе с $ (event.target).remove(); Спасибо.

Ответ №5:

Этот плагин craftpip / jquery-подтверждает

изначально был разработан для мобильных устройств, основан на платформе bootstrap3. Поддерживает оповещения, подтверждения, модальности, диалоги и множество опций.

Простой в использовании.

 $.alert({
    title: 'title here',
    content: 'content here',
    confirm: function(){
        //on confirm
    },
    cancel: function(){
        // on cancel
    }
})
  

Поддерживает загрузку ajax, анимацию CSS3, адаптивный интерфейс и т.д.

[РЕДАКТИРОВАТЬ] Подробную документацию можно найти здесь

Список функций:

  • Темы (включая темы для Android)
  • Загрузка содержимого с помощью Ajax.
  • CSS3 анимации (2D и 3D анимации)
  • Параметры отскока анимации
  • Автоматическое закрытие (запускает действие после истечения времени ожидания)
  • Значки
  • отключение фона (закрывает модал при нажатии вне модала)
  • Действия с клавиатуры (триггеры ВВОДА / ПРОБЕЛА подтверждают, триггеры ESC отменяют)
  • Подробный API для программного изменения содержимого в модальном режиме.

Я активно разрабатываю плагин, пожалуйста, предложите улучшения и функции.

Ответ №6:

Я ничего не видел с оповещениями, поскольку думаю, что он использует для них собственный внешний вид. Вы должны иметь возможность настраивать их с помощью другого плагина jQuery и / или CSS.

Вот пример jQuery

Обновить:

Что ж, ссылка теперь 404, а jQM 1.2 отсутствует и предлагает всплывающие окна:

Комментарии:

1. ваша ссылка превратилась в ссылку 404

2. вот хорошая ссылка: abeautifulsite.net/blog/2008/12/jquery-alert-dialogs

Ответ №7:

Попробуйте,

 if (confirm("Are you sure?"))
{
   /*code to execute when 'Ok' bttn selected*/
}
  

Комментарии:

1. Это работает, но использует диалоговое окно Javascript по умолчанию. Дизайн минимален, и на Android он показывает URL страницы, которая вызвала функцию подтверждения (). Это могло бы сбить с толку пользователей.