Более 2 кнопок на сладости 2

У меня есть sweetalert с 2 кнопками, но я хочу, чтобы в нем была еще одна кнопка. Например, на данный момент у меня есть да и нет, я хочу добавить еще одну кнопку, скажем позже. пожалуйста, помогите

$("#close_account").on("click", function(e) {
        e.preventDefault();
        swal({
          title: "Are you sure?",
          text: "You will not be able to open  your account!",
          type: "warning",
          showCancelButton: true,
          confirmButtonColor: "#DD6B55",
          confirmButtonText: "Yes, close my account!",
          closeOnConfirm: false
        },
        function(){
          window.location.href="<?php echo base_url().'users/close_account' ?>"
        });
    });

Заранее спасибо:)

Ответ 1

Вы должны использовать пользовательский HTML с привязками событий jQuery, он работает почти так же, только проблема, которую вам нужно добавить стиль для кнопок самостоятельно, потому что классы SweetAlert не работают для меня.

$(document).ready(function() {
  $("#close_account").on("click", function(e) {
    var buttons = $('<div>')
    .append(createButton('Ok', function() {
       swal.close();
       console.log('ok'); 
    })).append(createButton('Later', function() {
       swal.close();
       console.log('Later'); 
    })).append(createButton('Cancel', function() {
       swal.close();
       console.log('Cancel');
    }));
    
    e.preventDefault();
    swal({
      title: "Are you sure?",
      html: buttons,
      type: "warning",
      showConfirmButton: false,
      showCancelButton: false
    });
  });
});

function createButton(text, cb) {
  return $('<button>' + text + '</button>').on('click', cb);
}
<link href="https://cdn.jsdelivr.net/sweetalert2/4.2.4/sweetalert2.min.css" rel="stylesheet"/>
<script src="https://cdn.jsdelivr.net/sweetalert2/4.2.4/sweetalert2.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<button id="close_account">Show</button>

Ответ 2

Приведенный выше ответ не сработал у меня, поэтому я сделал следующее:

    $(document).on('click', '.SwalBtn1', function() {
        //Some code 1
        console.log('Button 1');
        swal.clickConfirm();
    });
    $(document).on('click', '.SwalBtn2', function() {
        //Some code 2 
        console.log('Button 2');
        swal.clickConfirm();
    });

$('#ShowBtn').click(function(){
    swal({
        title: 'Title',
        html: "Some Text" +
            "<br>" +
            '<button type="button" role="button" tabindex="0" class="SwalBtn1 customSwalBtn">' + 'Button1' + '</button>' +
            '<button type="button" role="button" tabindex="0" class="SwalBtn2 customSwalBtn">' + 'Button2' + '</button>',
        showCancelButton: false,
        showConfirmButton: false
    });
 });
.customSwalBtn{
		background-color: rgba(214,130,47,1.00);
    border-left-color: rgba(214,130,47,1.00);
    border-right-color: rgba(214,130,47,1.00);
    border: 0;
    border-radius: 3px;
    box-shadow: none;
    color: #fff;
    cursor: pointer;
    font-size: 17px;
    font-weight: 500;
    margin: 30px 5px 0px 5px;
    padding: 10px 32px;
	}
<link href="https://cdn.jsdelivr.net/sweetalert2/4.2.4/sweetalert2.min.css" rel="stylesheet"/>
<script src="https://cdn.jsdelivr.net/sweetalert2/4.2.4/sweetalert2.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<button id="ShowBtn" class="customSwalBtn">Alert</button>

Ответ 3

Ричард Кук заметил выше, что оригинальный ответ (предоставленный Константином Азизовым) перестал работать с версией 4.2.6 SweetAlert2. Он предположил, что это связано с клонированием узлов, когда они добавляются в html. Я не знаю SweetAlert2 достаточно хорошо, чтобы сказать, был ли он прав или нет. Я мог видеть, что мои кнопки были добавлены, но функции обратного вызова onclick так и не были вызваны.

Приложив немного усилий, я смог заставить это работать с текущей версией SweetAlert2. Чтобы это работало, я должен был назначить события onclick кнопкам на более позднем этапе. В итоге я добавил идентификаторы к кнопкам, чтобы их было легко выбрать из jQuery. Затем я добавил функцию onOpen в свой объект swal и там подключил логику, чтобы связать функции обратного вызова. Ниже приведен фрагмент кода, который работает для меня.

Также обратите внимание, что сообщение и кнопки используют некоторые существующие классы SweetAlert2, поэтому они выглядят так же, как и существующие элементы пользовательского интерфейса. Предупреждение, я попытался использовать классы swal2-verify и swal2-cancel. Когда я сделал это, я столкнулся с некоторыми проблемами. Может случиться так, что код SweetAlert2 зависит от наличия только одного элемента, который использует этот класс. У меня не было времени преследовать его, поэтому я просто перестал использовать эти классы.

function createButton(text, id) {
        return $('<button class="swal2-input swal2-styled" id="'+id+'">'+text+'</button>');
    }

    function createMessage(text) {
        return $('<div class="swal2-content" style="display: block;">'+text+'</div>');
    }

function swThreeButton(msg, textOne, textTwo, textThree, callbackOne, callbackTwo, callbackThree) {

        var buttonsPlus = $('<div>')
                .append(createMessage(msg))
                .append(createButton(textOne,'sw_butt1'))
                .append(createButton(textTwo,'sw_butt2'))
                .append(createButton(textThree,'sw_butt3'));

        swal({
            title: 'Select Option',
            html: buttonsPlus,
            type: 'question',

            showCancelButton: false,
            showConfirmButton: false,
            animation: false,
            customClass: "animated zoomIn",
            onOpen: function (dObj) {
                $('#sw_butt1').on('click',function () {
                   swal.close();
                   callbackOne();
                });
                $('#sw_butt2').on('click',function () {
                    swal.close();
                    callbackTwo();
                });
                $('#sw_butt3').on('click',function () {
                    swal.close();
                    callbackThree();
                });
            }
        });

    };