2

如果我将此 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 控制台中快速闪现一个错误,我相信它会说:未捕获的错误:语法错误,无法识别的表达式:#<%= upNewClient.ClientID %>

4

4 回答 4

3

您缺少#内联的 id 选择器和错误放置的引号..缺少右括号

所以

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

应该

$('#<%= upNewClient.ClientID %>').show();
于 2013-03-16T16:04:56.233 回答
2

您有语法错误。$'(%<=应该是$('#<%=,你忘记了右括号$(...)

于 2013-03-16T16:06:30.897 回答
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(而不是OnInit,OnLoadOnPreRender)可防止值不必要地膨胀视图状态。)

于 2013-03-16T16:22:26.553 回答
-2

我认为问题出在语法上,尝试像这样更改它

<asp:Button ID="btnNewClient" runat="server" OnClientClick="$('#<%= upNewClient.ClientID %>').show(); return false;"/>
于 2013-03-16T16:03:42.957 回答