我的linkbutton
页面中有aspx
<asp:LinkButton ID="LinkButton1" OnClientClick="if ( !MutExChkList()) return false;" runat="server" OnClick="LinkButton1_Click">LinkButton</asp:LinkButton>
在clientclick
事件中,我需要使用javascript
来确认用户的某些内容,如果javascript返回true,那么我需要触发OnClick
按钮事件,如果javascript
返回false然后我不需要做什么说不要postback
页面...
以下是我的javascript
<script type="text/javascript">
function MutExChkList() {
swal({
title: 'Are you sure?',
text: 'You will not be able to recover this imaginary file!',
type: 'warning',
showCancelButton: true,
confirmButtonColor: '#DD6B55',
confirmButtonText: 'Yes, delete it!',
cancelButtonText: 'No, cancel plx!',
closeOnConfirm: false,
closeOnCancel: false
}, function (isConfirm) {
if (isConfirm) {
return true;
} else {
return false;
}
});
};
</script>
我从以下链接获得了帮助
Stopping onclick from firing when onclientclick is false?
Prevent LinkButton post back OnClientClick not working. Why?
以及更多搜索......
如果我使用OnClientClick="MutExChkList(event);"
,则会在true
或false
如果我使用OnClientClick="if ( !MutExChkList()) return false;"
,那么当函数返回postback
时它不会true
任何人都可以帮我摆脱这个...... 提前致谢... 我正在使用asp.net
答案 0 :(得分:0)
如评论中所述,您无法从回调内部返回,并期望外部函数甚至可以了解它。该函数在调用swal()
后立即退出,并始终返回undefined
。
一个选项是在设置标记/标记后阻止初始点击并从代码触发点击操作。
类似的东西:
var allow = false;
function MutExChkList() {
if (!allow) {
swal({
title: 'Are you sure?',
text: 'You will not be able to recover this imaginary file!',
type: 'warning',
showCancelButton: true,
confirmButtonColor: '#DD6B55',
confirmButtonText: 'Yes, delete it!',
cancelButtonText: 'No, cancel plx!',
closeOnConfirm: false,
closeOnCancel: false
}, function(isConfirm) {
if (isConfirm) {
allow = true; // Allow next click to succeed
$('#LinkButton1')[0].click(); // Hit the browser event direct
}
});
}
return allow;
};
然后按钮变为:
<asp:LinkButton ClientIDMode="static" ID="LinkButton1" OnClientClick="return MutExChkList();" runat="server" OnClick="LinkButton1_Click">LinkButton</asp:LinkButton>
一旦你的按钮上有ClientID
,你可以用jQuery方式完成所有代码:
<asp:LinkButton ClientIDMode="static" ID="LinkButton1" runat="server" OnClick="LinkButton1_Click">LinkButton</asp:LinkButton>
和jQuery:
var allow = false;
$('#LinkButton1').click() {
if (!allow) {
swal({
title: 'Are you sure?',
text: 'You will not be able to recover this imaginary file!',
type: 'warning',
showCancelButton: true,
confirmButtonColor: '#DD6B55',
confirmButtonText: 'Yes, delete it!',
cancelButtonText: 'No, cancel plx!',
closeOnConfirm: false,
closeOnCancel: false
}, function(isConfirm) {
if (isConfirm) {
allow = true; // Allow next click to succeed
$('#LinkButton1')[0].click(); // Hit the browser event direct
}
});
}
return allow;
});
答案 1 :(得分:0)
我有解决办法。 是的,您不能从回调内部返回并且不能期望外部函数知道它。该函数在调用swal()后立即退出,并且始终返回未定义或内部返回。
我的示例,我总是返回false,在我的函数中,我发送单击的按钮对象以再次单击它。 然后,我有一个名为Myflag的变量,我的变量告诉我是否单击了Sweetalert,如果Myflage为false,则再次显示Sweetalert,如果Myflag为true,则返回true,OnClick立即执行服务器方法。
类似的东西:
var Myflag = false;
function EliminarRegistroJavaS(e) {
if (Myflag == false) {
Swal.fire({
title: 'Eliminar registro',
text: 'Desea quitar el Registro?',
icon: 'warning',
showCancelButton: true,
confirmButtonColor: '#3085d6',
cancelButtonColor: '#d33',
confirmButtonText: 'Si, Quitar!',
closeOnConfirm: true
}).then((result) => {
if (result.value) {
Swal.fire(
'Eliminado!',
'Registro de Eliminado',
'success'
);
Myflag = true;
e.click()
};
});
return false;
} else {
Myflag = false;
return true;
}
}
<asp:LinkButton ID="lnkRemove" class="btn btn-danger btn-sm" runat="server" CommandArgument='<%# Eval("idregistro")%>' OnClientClick="return EliminarRegistroJavaS(this); return false;" Text="Borrar" OnClick="MethodoElminarServer"></asp:LinkButton>