【问题标题】:How to make onclick to fire when javascript returns false当javascript返回false时如何使onclick触发
【发布时间】:2015-06-30 17:39:09
【问题描述】:

当 javascript 返回 false 时,onclick 不起作用。我需要 javascript 返回 false 以便为按钮设置动画。如果我返回 true,则 onClick 有效,但动画无效。我试过做 __doPostBack 和 UseSubmitBehaviour 但似乎没有任何效果。对于如何解决此问题,我们将不胜感激。

asp按钮代码:

<asp:LinkButton id="btn_salaries" onClientClick="return fncsave();" OnClick="btn_clicked" UseSubmitBehavior="false" runat="server" type="button" class="list-group-item" Text="getCharitySalaries"/>

Javascript 代码:

function fncsave(){
        $(document).ready(function(){
            $("#list").click(function(){
                $("#list_of_btns").animate({left: '-290px'});
            });
        });
        return false;
    }

更新:

我正在使用 ajax 制作动画,但我不知道我是否正确执行此操作,因为它不执行动画。

下面是我的代码:

function fncsave(){
    alert("dsfdsf");
    $(document).ready(function(){
        $(document).ajaxStart(function(){
            $("#list_of_btns").animate({left: '-290px'});
        }
    }
    return true;
}

【问题讨论】:

  • 尝试使用 MVC.NET 并获得更好的客户端/服务器行为耦合。相比之下,在 ASPX 中,客户端和服务器实际上是两个不同的世界。

标签: javascript c# asp.net


【解决方案1】:

您不应在单击事件处理程序上检查文档就绪事件。此外,当有人单击链接时,您正在调用 fncsave 函数,但在该函数中,您正在订阅带有 id 列表的标签上的另一个事件(单击)。 如果我理解正确,你应该这样做:

function fncsave(){
        $("#list_of_btns").animate({left: '-290px'});
        return false;
    }

就像注释一样,“return false”意味着它不会继续正常的事件处理流程,即提交表单。

如果返回 true,则提交表单。这意味着表单数据被发送到服务器并执行 C# 代码。然后,页面如果完全重新加载(从头开始)。在这种情况下,动画没有意义,您需要 AJAX 在 C# 代码运行时执行动画。请参阅本关于 AJAX 的教程 (Tutorial about AJAX)。

【讨论】:

  • 有道理,但 OnClick 仍然不起作用。我不知道如何使这项工作。
  • OnClick 是服务器端的事件处理程序,仅在 JS 函数返回 true 时执行(回发)。如果需要执行 JS 代码和 C# 代码,则返回 true 而不是 false。考虑到页面将被提交。
  • 那么我是在 fncsave() 中写 __doPostBack() 还是在 OnClientClick() 中写这个?
  • 那是因为当你做一个回发(在JS代码中返回true)时,表单被发送到服务器,C#代码被执行并且一个新的页面被返回给客户端(重新加载页面从刮)。您不希望这样,您想在 C# 操作运行时显示动画,对吗?在这种情况下,您需要使用 AJAX。这意味着,您的 JS 代码将异步调用 C# 方法。
  • 我更新了问题中的代码,我正在使用 ajax,但动画不再起作用。
【解决方案2】:

这样试试

 function fncsave(){
        $("#list").click(function(){
             $("#list_of_btns").animate({left: '-290px'},900,function(){
                    return false;
               });
          });
        }

【讨论】:

  • 不幸的是,由于它仍然返回 false,它不会触发 OnClick 事件。
  • 所以你可以把它改成true
  • 如果我将其更改为 true 则动画将不起作用
【解决方案3】:

我有一个“动画”变量,默认值为 false。如果按钮被点击,检查动画是否为假,'preventDefault()' 取消提交,播放动画,'setTimeOut()' 将在 3000ms 后执行,将动画分配为 true,并触发按钮上的'点击'。这一次,animated 是 true,它将数据发布到服务器。

<asp:Button ID="btn_salaries" OnClick="Button_Click" runat="server" type="button" Text="getCharitySalaries" />
<br />
<script type="text/javascript">
    $(document).ready(function (e) {

        var animated = false;
        $('#' + '<% = btn_salaries.ClientID %>').click(function (ev) {
            if (!animated) {
                ev.preventDefault();
                $(this).animate({ left: '-290px' });
                setTimeout(function () {
                    animated = true;
                    $('#' + '<% = btn_salaries.ClientID %>').trigger('click');
                }, 3000);
            }
        });
    });
</script>

希望对您有所帮助。

【讨论】:

    【解决方案4】:

    这应该做你想做的。

    function fncsave(){
        $("#list_of_btns").animate({left: '-290px'},900,function(){
            // Do __doPostBack here
        });
        return false;
    }
    

    它会延迟回帖,直到动画完成。另一种方法是使用更新面板来避免回帖中跟随动画的闪烁。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-13
      • 2013-10-09
      • 2013-11-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-21
      • 1970-01-01
      相关资源
      最近更新 更多