如果我将此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;
答案 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: $('#<%= 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
,OnLoad
或OnPreRender
)可防止该值不必要地膨胀视图状态。)
答案 3 :(得分:-2)
我认为问题在于语法,尝试像这样改变它
<asp:Button ID="btnNewClient" runat="server" OnClientClick="$('#<%= upNewClient.ClientID %>').show(); return false;"/>