为什么javascript行必须在函数中工作?

时间:2013-03-16 16:02:10

标签: javascript jquery asp.net

如果我将此javascript放在我的aspx页面上,面板会在按钮点击时按预期显示:

 <script type="text/javascript">
 function ShowPopUp() {
     $('#<%= upNewClient.ClientID %>').show();
 }
 </script>

 <asp:Button ID="btnNewClient" runat="server" OnClientClick="javascript: ShowPopUp(); return false;" />

但是如果我尝试用这个函数做这个,它就不起作用了:

<asp:Button ID="btnNewClient" runat="server" OnClientClick="javascript: $'(%<= upNewClient.ClientID %>'.show(); return false;"/>

页面闪烁,我的javascript控制台中可能出现错误,但它来得太快,让我无法阅读。

那么,为什么完全相同的代码行不能在函数之外工作呢?

修改 我已经多次重写了这段代码(我实际上是在后面的代码中尝试这样做了),并且在我最初发布之前的时间错误地输入了它。实际的按钮标记是:

<asp:Button ID="btnNewClient" runat="server" Text="Add New Client" OnClientClick="javascript: $('#<%= upNewClient.ClientID %>').show(); return false;" />

我的javascript控制台很快就会出现错误,我相信这样说: 未捕获错误:语法错误,无法识别的表达式:#&lt;%= upNewClient.ClientID%&gt;

4 个答案:

答案 0 :(得分:3)

您缺少内联和错误放置引号的# id选择器..缺少关闭paren

所以

$'(%<= upNewClient.ClientID %>'.show();

应该是

$('#<%= upNewClient.ClientID %>').show();

答案 1 :(得分:2)

您遇到语法错误。$'(%<=应为$('#<%=而您忘记了$(...)的右括号

答案 2 :(得分:1)

服务器端控件的属性中不支持<%= ... %>语法,因此将整个内容发送到浏览器:

<input type="submit" name="btnNewClient" value="Add New Client"
    onclick="javascript: $('#&lt;%= upNewClient.ClientID %>').show(); return false;"
    id="btnNewClient" />

因为jQuery无法解析表达式,所以它会引发异常。

相反,您可以从代码隐藏中设置按钮的OnClientClick属性:

<asp:Button ID="btnNewClient" runat="server" Text="Add New Client" />
protected override void Render(HtmlTextWriter writer)
{
    this.btnNewClient.OnClientClick =
        "$('#" + this.upNewClient.ClientID + "').show(); return false;";
    base.Render(writer);
}

(在Render中设置属性(而不是OnInitOnLoadOnPreRender)可防止该值不必要地膨胀视图状态。)

答案 3 :(得分:-2)

我认为问题在于语法,尝试像这样改变它

<asp:Button ID="btnNewClient" runat="server" OnClientClick="$('#<%= upNewClient.ClientID %>').show(); return false;"/>