【问题标题】:How to call onclientclick after onclickonclick后如何调用onclientclick
【发布时间】:2013-07-03 12:25:33
【问题描述】:

我有这个按钮

<asp:Button runat="server" ID="btnReviewDocs" CssClass="btnReviewDocs" data-theme="b"
                Text="Review Documents" OnClick="btnReviewDocs_Click" OnClientClick="clickHyperlink();"/>

在“OnClick”事件中,我正在组装一个需要设置为 asp:Hyperlink 的 URL,在“OnClick”的末尾,我将此 URL 设置为“asp:”的“NavigateURL”属性超链接”。一旦 'asp:Hyperlink' 具有正确的 URL,我需要调用 'clickHyperlink()' 函数。

function clickHyperlink() {
    var href = $('#hlnkID').attr('href');
    if (typeof href !== "undefined") {
        $.mobile.showPageLoadingMsg();
        window.location.href = href;
    }
}

但“OnClientClick”事件总是在“OnClick”之前执行。有什么解决方法的建议吗?

我正在做所有这些事情,因为我遇到了 JQuery Mobile 和“Response.Redirect(url);”的问题正在更改页面,但不是 URL。

【问题讨论】:

    标签: c# jquery asp.net onclick onclientclick


    【解决方案1】:

    我相信你真的不需要在JS部分涉及Hyperlink控件。 修改你的 JS 函数并从 btnReviewDocs 按钮中删除 OnClientClick 属性:

    <script type="text/javascript">
        function clickHyperlink(href) {
            $.mobile.showPageLoadingMsg();
            window.location.href = href;
        }
    </script>
    

    在服务器上,在btnReviewDocs_Click 方法中:

    protected void btnReviewDocs_Click(object sender, EventArgs e)
    {
        // TODO: set the url, maybe append some params to the 
        // hlnkID.NavigateUrl value
        var url = "http://stackoverflow.com/";
        ClientScript.RegisterStartupScript(Page.GetType(), 
            "clickHyperlink",
            "clickHyperlink('" + url + "');",
            true);
    }
    

    【讨论】:

    • 如果函数定义在 js 文件中,比如 MyPage.js 会怎样?
    • 如果你在 JS 文件中添加脚本引用,它应该仍然可以工作。
    • 我在 'ClientScript.RegisterStartupScript...' 行和'clickHyperlink' 内添加了一个断点(我使用的是谷歌浏览器),但 clickHyperlink 函数内的断点没有火,我也没有被重定向到新的 URL。
    • 请确保您使用我回答中的最新代码示例,因为我最初插入了一个错字。
    【解决方案2】:

    使用ClientScript对象中的RegisterStartupScript回发后运行代码--->

    protected void btn_Click(object sender, EventArgs e)
        { 
            //some code    
            this.ClientScript.RegisterStartupScript(this.GetType(), "clintClick", "clickHyperlink", true);
        }
    

    【讨论】:

      【解决方案3】:

      试试这个

          protected void btnReviewDocs_Click(object sender, EventArgs e)
          { 
              //something doing here
      
              Page.ClientScript.RegisterStartupScript(this.GetType(), "test", "<script type='text/javascript'>clickHyperlink()</script>");//call javascript function
          }
      

      【讨论】:

        【解决方案4】:

        @Alex Filipovici 提到了答案。

        但首先你应该问问自己,你真的需要回到客户端进行重定向吗?

        为什么不打电话:

        Response.Redirect("MyURL");
        

        【讨论】:

        • 我已经提到了原因 - 我在使用 JQuery Mobile 时遇到问题并且正在寻找解决方法,这导致我遇到了当前的情况。
        猜你喜欢
        • 1970-01-01
        • 2014-01-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-04-16
        • 1970-01-01
        • 2015-06-03
        相关资源
        最近更新 更多