Пользовательский диалог подтверждения в JS или JQuery

У меня есть этот код JavaScript (KnockoutJS). У меня есть функция, которая в некоторых случаях запрашивает диалог подтверждения и возвращает ответ пользователя или "true", если ему вообще не нужно было выводить диалог.

Обычный диалог JS уродлив, и я хотел бы создать собственный диалог, но мне нужен своего рода модальный диалог, чтобы я мог получить ответ пользователя - я не хочу определять следующую операцию (что делать, если пользователь щелкает OK) в самом диалоге, потому что - как вы можете видеть в моем коде - я использую один и тот же диалог для многих различных функций, каждая из которых имеет свое поведение, поэтому каждый раз, когда следующая операция отличается.

 self.confirmDialog = function () {
       if (condition) {
           return (confirm("text text text"));
       }
       else {
             return true;
       }
  }


 self.doSomething1 = function () {
     if (self.confirmDialog ()) {
         // do something 1
     }
     // some code
 }
 self.doSomething2 = function () {
     // some code
     if (self.confirmDialog ()) {
         // do something 2
     }
 }
 self.doSomething3 = function () {
     if (self.confirmDialog ()) {
         // do something 3
     }
 }

2 ответа

Вы можете сделать это с помощью диалоговых окон jQuery UI. Посмотрите этот пример на модальных формах в официальной документации, полный исходный код находится внизу. По сути, вы создаете div с полями формы:

<div id="dialog-form" title="Create new user">
    <form>
        <fieldset>
            <label for="name">Name</label>
            <input type="text" name="name" id="name" value="Jane Smith" class="text ui-widget-content ui-corner-all">
            <label for="email">Email</label>
            <input type="text" name="email" id="email" value="jane@smith.com" class="text ui-widget-content ui-corner-all">
            <label for="password">Password</label>
            <input type="password" name="password" id="password" value="xxxxxxx" class="text ui-widget-content ui-corner-all">
        </fieldset>
    </form>
</div>

Затем вы можете открыть его как диалоговое окно jQuery UI и обработать данные формы в обратном вызове для кнопки отправки вашего диалога.

var dialog = $("#dialog-form").dialog({
    height: 300,
    width: 350,
    modal: true,
    buttons: {
        "Create an account": function() {
            // handle your form here
            var name = $("#name"),
            email = $("#email"),
            password = $("#password");

            var nameValue = name.val();
            //...
        },
        Cancel: function() {
            dialog.dialog( "close" );
        }
    }
});

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

self.dialogOptions = {
    height: 300,
    width: 350,
    modal: true,
    buttons: {
        "Create an account": function() {
            self.acceptCallback();
        },
        Cancel: function() {
            dialog.dialog( "close" );
            self.cancelCallback();
        }
    }
}

self.doSomething1 = function () {
    self.acceptCallback = function() {
        // do something if the user accepts
    };
    self.cancelCallback = function() {
        // do something if the user cancels
    };

    $("#dialog-form").dialog(self.dialogOptions);
}
self.doSomething2 = function () {
    // do the same, setting different callbacks before opening the dialog
}

Если вам нужно что-то сделать независимо от того, принимает пользователь или нет, просто поместите код в функцию и вызовите его из обоих acceptCallback а также cancelCallback,

Попробуйте это сладкое предупреждение

Хороший интерфейс и многофункциональный

Другие вопросы по тегам