如何检查该面板在 JavaScript 中是否可见?我正在使用 ASP.NET 2.0。
5 回答
假设您在服务器端设置面板的可见性document.getElementById()
,只要您确保使用面板控件的正确客户端 ID(不要对其进行硬编码),就可以检查返回的值.
请参阅客户端findPanel()
功能中的检查以进行演示。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
<script type="text/javascript">
function findPanel() {
var panel = document.getElementById("<%= pnlMyPanel.ClientID %>");
if (panel) {
alert("Panel is visible");
}
else {
alert("Panel is not visible");
}
// // And this would work too:
// alert((<%= pnlMyPanel.Visible.ToString().ToLower() %>) ? "Panel is visible": "Panel is not visible");
}
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Panel runat="server" ID="pnlMyPanel">
<p>
This is a panel.</p>
</asp:Panel>
<asp:Button runat="server" ID="btnToggle" Text="Toggle panel visibility..." />
<input type="button" value="Do client-side visibility check..." onclick="javascript:findPanel();" />
</div>
</form>
</body>
</html>
代码隐藏文件中的以下代码在btnToggle
单击时切换面板的可见性:
protected void Page_Load(object sender, EventArgs e)
{
btnToggle.Click += new EventHandler(btnToggle_Click);
}
void btnToggle_Click(object sender, EventArgs e)
{
pnlMyPanel.Visible = !pnlMyPanel.Visible;
}
如果您使用的是 jQuery - 您尝试过visible selector
吗?
例如:
if ($("#test").filter(":visible").length > 0) {
/* visible */
} else {
/* invisible */
}
如果面板在服务器端隐藏,并且任何 jQuery(效果/过渡等)已触发并隐藏面板,这将起作用。只是检查exists
或如果getElementById
返回某些东西不会。
请务必将客户端 ID 注入 JavaScript ,然后检查:visible
,这将使您的查找速度更快。A la 文档:
因为 :visible 是一个 jQuery 扩展而不是 CSS 规范的一部分,所以使用的查询
:visible
不能利用原生 DOMquerySelectorAll()
方法提供的性能提升。要在使用:visible
to 选择元素时获得最佳性能,首先使用纯 CSS 选择器选择元素,然后使用.filter(":visible")
.
一种简单的方法是将当前可见值从 ASP.NET 直接传递给 javascript。
<script type="text/javascript>
function IsPanelVisible() {
return <%= pnlMessages.Visible.ToString().ToLower() %>
}
</script>
如果该Visible
属性为假,则根本不会发送给客户端(甚至隐藏)。ASP.NET 在服务器端运行它。因此,您可以使用 搜索它document.getElementById(<%= panel.ClientID %>)
,如果结果为空,则它不可见。
面板是服务器端控件。如果它的 visible 值为 true,您可以在页面源中看到具有相同 id 的 div。如果其可见值为 false,则该面板部分根本不会发送到客户端浏览器。
一种实现方法是在 javascript 中检查其 ID。在 jquery 中, if($("#mypanel").exists()) 可以检查。在javascript中,检查一下如何检查可见DOM中是否存在元素?