当OnClientClick返回False时,阻止LinkBut​​ton触发OnClick

时间:2016-01-08 12:10:38

标签: javascript jquery asp.net twitter-bootstrap linkbutton

我的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);",则会在truefalse

两种情况下进行回发

如果我使用OnClientClick="if ( !MutExChkList()) return false;",那么当函数返回postback时它不会true

任何人都可以帮我摆脱这个...... 提前致谢... 我正在使用asp.net

2 个答案:

答案 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>