我正在使用 Metronic bootstrap admin 它们,它带有 sweetalert - 这是一个警报库
我要做的是在尝试从表中删除记录时发出确认警报,每一行都有一个删除按钮
现在 Metronic 已经对其进行了一些扩展,因此您现在可以使用 html 5“数据”属性以声明方式声明标题、按钮类型等。
在我的 MVC 应用程序中,以下 Razor 代码迭代并添加按钮,请注意我正在向其中添加 data-id 属性 - 想法是我可以在单击按钮时提取它以获取 id 以删除它
例如
<button data-id="@u.Id" type="button" class="btn btn-xs btn-circle red btn-delete mt-sweetalert" data-title="Are you sure?" data-type="warning" data-allow-outside-click="true" data-show-confirm-button="true" data-show-cancel-button="true" data-cancel-button-class="btn-danger" data-cancel-button-text="Cancel" data-confirm-button-text="Proceed" data-confirm-button-class="btn-info">
<i class="fa fa-times"></i>
</button>
以下是 Metronic JS 扩展文件 - 我已经添加了几行代码,因此它会在单击确认选项时调用自定义函数。
我的想法是我可以保留 Metronic Theme 的添加内容并在我需要的页面上调用自定义函数
请注意,我还将 $(this) 上下文传递给我的自定义函数
var SweetAlert = function () {
return {
//main function to initiate the module
init: function () {
$('.mt-sweetalert').each(function(){
var sa_title = $(this).data('title');
var sa_message = $(this).data('message');
var sa_type = $(this).data('type');
var sa_allowOutsideClick = $(this).data('allow-outside-click');
var sa_showConfirmButton = $(this).data('show-confirm-button');
var sa_showCancelButton = $(this).data('show-cancel-button');
var sa_closeOnConfirm = $(this).data('close-on-confirm');
var sa_closeOnCancel = $(this).data('close-on-cancel');
var sa_confirmButtonText = $(this).data('confirm-button-text');
var sa_cancelButtonText = $(this).data('cancel-button-text');
var sa_popupTitleSuccess = $(this).data('popup-title-success');
var sa_popupMessageSuccess = $(this).data('popup-message-success');
var sa_popupTitleCancel = $(this).data('popup-title-cancel');
var sa_popupMessageCancel = $(this).data('popup-message-cancel');
var sa_confirmButtonClass = $(this).data('confirm-button-class');
var sa_cancelButtonClass = $(this).data('cancel-button-class');
$(this).click(function(){
//console.log(sa_btnClass);
swal({
title: sa_title,
text: sa_message,
type: sa_type,
allowOutsideClick: sa_allowOutsideClick,
showConfirmButton: sa_showConfirmButton,
showCancelButton: sa_showCancelButton,
confirmButtonClass: sa_confirmButtonClass,
cancelButtonClass: sa_cancelButtonClass,
closeOnConfirm: sa_closeOnConfirm,
closeOnCancel: sa_closeOnCancel,
confirmButtonText: sa_confirmButtonText,
cancelButtonText: sa_cancelButtonText,
},
function(isConfirm){
//action function on click
if (isConfirm){
swal(sa_popupTitleSuccess, sa_popupMessageSuccess, "success");
//custom function call added by me
//------------------------------------------
if(typeof onConfirmClick === "function")
onConfirmClick.call(this);
//------------------------------------------
} else {
swal(sa_popupTitleCancel, sa_popupMessageCancel, "error");
}
});
});
});
}
}
}();
jQuery(document).ready(function() {
SweetAlert.init();
});
我页面中的功能:
<script type="text/javascript">
function onConfirmClick() {
alert($(this).data('id'));
//make Ajax call here
}
</script>
现在的问题是,我正在获取 ($this) 但无法从按钮获取 id 或任何属性
这里的问题是:
- 如何在我的函数中获取 data-id 属性?如果我尝试 $(this).data('id') - 我得到未定义
- 这是正确的方法设计吗?我希望能够在确认时调用自定义函数但不破坏 sweetalert 上的 Metronic 扩展?