Более 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();
});
}
});
};