我试图在用户点击添加按钮后显示一个新面板,由于某种原因这不起作用(它也会刷新页面,即使我的按钮返回true)我尝试了不同的方法,但是似乎没什么用。
<asp:Button ID="btnAdd" runat="server" Text="Add Property" CssClass="btn" OnClientClick="addProperty(); return false;" />
<script type="text/javascript">
var num = 1;
function addProperty()
{
num++;
var panelName = "<%=pnlProperty" + num.toString() + ".ClientID%>";
alert(panelName);
document.getElementById(panelName).style.display="inline";
}
</script>
任何帮助都会很棒!
答案 0 :(得分:0)
你不能像那样交互javascript和ASP.NET。在将代码发送到javascript执行的客户端之前,ASP.NET将始终执行。您可以使用.NET 生成 javascript。
在您的情况下,这将在其他任何事情之前执行:
<%=pnlProperty" + num.toString() + ".ClientID%>
它不会在循环中执行,因为它在生成循环并发送到客户端之前作为ASP.NET代码执行。也不会使用javascript变量num
的值来创建面板,因为javascript尚未开始执行。 <%
,... %>
中的所有内容都将被解释为.NET代码。所以.NET只会抛出一个错误,因为上面的代码并不准确。
您需要编写.NET代码,以便生成有意义的javascript。
你可以这样做:
var panels = [
"<%= pnlProperty0.ClientID %>",
"<%= pnlProperty1.ClientID %>",
"<%= pnlProperty2.ClientID %>"
];
...可能会生成类似
的javascriptvar panels = [
"ctl00_main_pnlProperty0",
"ctl00_main_pnlProperty1",
"ctl00_main_pnlProperty2"
];
...这是一种创建字符串数组的完全准确的方法,然后您可以在javascript中使用
document.getElementById(panels[num]).style.display="inline";
如果你想要一个动态循环,你可能需要做类似
的事情var panels = "<%
String.Join(
",",
Page.Controls.OfType<Panel>()
.Where(panel => panel.ID.StartsWith("pnlProperty"))
.Select(panel => panel.ClientID).ToArray());
%>";
...可能会创建像
这样的东西var panels = "ctl00_main_pnlProperty0,ctl00_main_pnlProperty1,ctl00_main_pnlProperty2";
然后你可以做:
var panelNames = panels.split(',');
document.getElementById(panelNames[num]).style.display="inline";
答案 1 :(得分:0)
根据你的代码,普通的html按钮不会足够吗?
<input type="button" value="Add Property" onclick="addProperty();" />