【问题标题】:How do you programmatically Invoke a Server Click via JQuery or Javascript您如何通过 JQuery 或 Javascript 以编程方式调用服务器单击
【发布时间】:2014-11-19 08:48:45
【问题描述】:

我在用户控件上有一个 ASP 服务器按钮,它触发了一个服务器端 OnClick 事件,它工作正常。但我需要使用 JavaScript 或 JQuery 触发 OnClick 事件。

我尝试了以下方法,但都没有像用户实际单击按钮那样实际模拟结果:

document.getElementById('<%=btnRefresh.ClientID%>').click();
$('#<%=btnRefresh.ClientID %>').click();

我怀疑这可能是因为它模拟了 OnClientClick 事件而不是服务器;但我发现声称这对其他人成功触发服务器端 OnClick 事件有效,但这对我不起作用。

还有其他方法可以完成任务吗?


响应AJAX的建议。我已经尝试过这种方法,但是要成功完成此任务,需要 PostBack。按钮的实际单击会产生所需的结果,我可以使用 AJAX 触发事件,但如果没有 PostBack 的元素,它会失败。

【问题讨论】:

  • 如果要通过客户端触发服务器事件,需要使用AJAX
  • 你有那个按钮的客户端事件处理程序吗?也许它返回 false 或以其他方式阻止回发发生。
  • @tymeJV 不,您可能会导致来自客户端代码的回发。使用 AJAX 会更好的设计,但不是必须的。
  • @mason -- 是的 -- 应该提到回发...我只是假设现在没有人想要回发:D
  • @tymeJV 与WebForms 合作。 :)

标签: javascript jquery asp.net


【解决方案1】:

我有一个 ASP 服务器按钮

所以你有类似的东西

<asp:Button ID="btnRefresh" Text="I'm a button" OnClick="btnRefresh_Click" />

为了也执行客户端调用,在服务器调用之前,您只需将函数或内联代码附加到OnClientClick 属性:

<asp:Button ID="btnRefresh" 
          Text="I'm a button" 
       OnClick="btnRefresh_Click"
 OnClientClick="btnRefreshClick" />

然后在您的 javascript 中简单地添加该方法

function btnRefreshClick() {

    // your stuff goes here...

    return true; // returning true (or nothing) will fire the server side click
                 // returning false will not fire it
}

补充:误解了这个问题,所以你想触发一个javascript事件,它会自动在按钮上执行click...

我刚刚测试了这段代码:

<body>
    <form id="form1" runat="server">
    <div>
        <asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" /><br />
        <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
        <br/>
        <a href="#" class="a">fire button click event</a>
    </div>
    </form>

    <script>
        $(".a").click(function() {
            //var elm = $("#" + "<%= Button1.ClientID %>"); elm.click(); // with jQuery

            var elm = document.getElementById('<%=Button1.ClientID%>');
            elm.click();
        });
    </script>
</body>

不管有没有 jQuery,我都能正确触发按钮:

正在执行的截屏视频:http://screencast.com/t/m4ohA9uW

【讨论】:

  • 问题不在于如何在服务器端之前调用客户端代码。这是关于如何模拟从客户端单击按钮以导致回发。这可以通过不同的方法来完成,例如每 5 分钟刷新一次日期的计时器。
  • .NET 框架中有一个名为 WebForm_DoPostBackWithOptions 的 Javascript 调用 - 我已经使用 jQuery 来触发事件。我使用 FireBug 查看签名并匹配我想要执行的操作以使其正常工作。
  • 感谢 Balexandre,但该代码看起来与我已经在做的非常相似,尽管我查看了截屏视频并且清楚地可以看到它在您的示例中工作。我看到的唯一不同的是我的代码位于 UserControl 中;没有表格存在。这会有所作为吗???
  • 我将尝试在我的 UserControl 中精确地实现您的代码,然后将更新结果。谢谢
  • 在 Web 表单中,您总是需要在每个页面中有一个 &lt;form&gt;,然后您的用户控制器就位于该表单中...顺便说一句,您想访问 @ 987654330@ 事件来自您的用户控制器,还是来自放置用户控制器的最终页面本身?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-11-23
  • 2012-06-25
  • 2019-12-09
  • 1970-01-01
  • 1970-01-01
  • 2012-06-21
  • 1970-01-01
相关资源
最近更新 更多