![](/img/trans.png)
[英]OnClick event not firing when onClientClick returns true
[英]Prevent LinkButton to fire OnClick when OnClientClick returns False
我的aspx
頁面中有linkbutton
<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>
我從以下鏈接中得到了幫助
當 onclientclick 為假時停止 onclick 觸發?
防止 LinkButton 回發 OnClientClick 不起作用。 為什么?
還有更多的搜索......
如果我使用OnClientClick="MutExChkList(event);"
然后它在兩種情況下都回發true
或false
如果我使用OnClientClick="if ( !MutExChkList()) return false;"
那么當函數返回true
時它不會postback
任何人都可以幫助我擺脫這種情況......在此先感謝......我正在使用asp.net
正如評論中提到的,您不能從回調內部返回並期望外部函數甚至知道它。 該函數在調用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;
});
我有一個解決方案。 是的,您不能從回調內部返回並期望外部函數甚至知道它。 該函數在調用 swal() 后立即退出並始終返回 undefined 或內部的一些返回值。
在我的示例中,我總是返回 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>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.