簡體   English   中英

當 OnClientClick 返回 False 時,防止 LinkBut​​ton 觸發 OnClick

[英]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 觸發?

防止 LinkBut​​ton 回發 OnClientClick 不起作用。 為什么?

還有更多的搜索......

如果我使用OnClientClick="MutExChkList(event);" 然后它在兩種情況下都回發truefalse

如果我使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM