【问题标题】:calling javascript function from code behind从后面的代码调用 javascript 函数
【发布时间】:2012-10-02 21:12:38
【问题描述】:

我正在尝试从按钮单击事件后面的代码中调用 javascript 函数。下面是我的 javascript 代码。

  ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "strScript", "javascript:clearBox();", true);

功能是

<script type="text/javascript">

function clearBox() {


    alert("Test");

}
</script>

我收到错误“预期对象”

【问题讨论】:

  • 我在您的代码中没有看到任何按钮。
  • ..这似乎是什么问题?还是您的问题
  • 看起来你正在使用内联 JS。如果是这样,请不要使用 eventListener。
  • 你得到错误“预期对象”在哪里?什么代码实际上引发了错误?这听起来像是一个 JavaScript 错误,所以 C# 代码将不是查看的地方。发送给客户端的任何内容都是您要查看的地方。

标签: c# javascript asp.net


【解决方案1】:

你应该使用按钮的 OnClientClick 属性:

<asp:Button runat="server" OnClientClick="clearBox()" />

RegisterClientScriptBlock 只会在页面上放置一段代码:

<script type="text/javascript">
      javascript:clearBox();
</script>

这将不起作用,因为它不是有效代码(因为 javascript: 用于锚点从 href:&lt;a href="javascript:some_code_here()"&gt;&lt;/a&gt; 运行 js)

如果您想要RegisterClientScriptBlock,另一个选项是使用 addEventListener 将 onclick 处理程序分配给您的按钮。 Here 是用于此的代码 sn-p(跨浏览器和纯 JS)。可以这样使用:

  ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "strScript", "addListener('"+button.ClientID+"', 'click', clearBox);", true);

但最好将RegisterClientScriptBlock替换为[RegisterStartupScript](http://msdn.microsoft.com/en-us/library/z9h4dk8y.aspx) 在加载所有 HTML 之前可能会调用第一个,并且可能还没有按钮。

更新 好吧,感谢hvd。他提醒我JS中有labels,实际上javascript:clearBox()是一个有效的代码,但它不会做OP想要的

【讨论】:

  • “因为它不是一个有效的代码”——它是一个附加在声明上的未使用的无用标签,但我相信它是完全有效的。请参阅 here 了解标签在 JS 中的工作方式,它们不经常使用(并且有充分的理由),但它们是语言的一部分。
  • 嗯..需要试试。但我不这么认为)让我用js fiddle检查一下
  • @hvd 呃。对不起。我明白你的意思了。永远不要使用那个东西,实际上忘记了这种可能性
  • 也许更糟:它会完全按照 OP 的要求做,但原因是错误的。如果标签未被使用,它将被忽略,因此 clearBox 将按预期调用。
  • @hvd 是的,你是对的。但他想在点击时调用它,所以“不会做OP想要的”;)
【解决方案2】:

使用此代码:

Page.ClientScript.RegisterStartupScript(this.GetType(),  "Error", "clearBox();", true);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多