[英]Hide button in asp.net formview using jquery
我想在FormView
槽JQuery
隐藏一个按钮控件。 表单部分以这种方式定义:
<body>
<div id="main">
<form id="_frmMain" runat="server">
<div id="contenitore">
<asp:FormView
ID="_fvMain"
runat="server"
DefaultMode="Edit"
Width="100%">
<EditItemTemplate>
<asp:Table CssClass="sub" runat="server">
<asp:TableRow CssClass="tr_button_list">
<asp:TableCell ColumnSpan="3">
<asp:Button
ID="_btnOk"
ClientIDMode="Static"
Text="Ok"
runat="server"
CssClass="butt_orange_small"
OnClientClick="javascript: return ShowSection('section1');" />
<asp:Button
ID="_btnCancel"
ClientIDMode="Static"
Text="Cancel"
runat="server"
CssClass="butt_orange_small"
OnClientClick="javascript: return ShowSection('section2');" />
我用这个代码:
$(function () {
var _btnOk = $("#_btnOk");
_btnOk.hide();
});
但它不起作用。 如果我调试这个脚本,我发现_btnOk
对象的hidden
属性即使在_btnOk
.hide()
调用之后也保持为false。
顺便说一下,我无法使用类引用隐藏按钮,因为它也会隐藏_btnCancel
,我需要这个才能保持可见性。
尝试按下这样的按钮:
var _btnOk = $("#<%= _btnOk.ClientID %>");
$(function () {
$('#contenitore input[type="button"][value="Ok"]').hide();
});
你的JQuery代码很好。 它可能是以下问题:
开始编辑
你确定id正在解析为正确的html标签吗? 您应该使用浏览器中的调试工具导航到该按钮并检查ID。 可能是您正在解析表单上具有相同名称的不同元素,这就是您没有看到更改的原因。 请参阅在Chrome中Select an element
( ctrl+shift+C
)。
另外正如我所提到的,其他人也使用<%= _btnOk.ClientID %>
是选择ASP.NET控件的元素id的最佳方法。 但是,这只会在.ascx
或.aspx
表单上解析。 这意味着如果您使用的是像在页面/控件中引用的MyExternalScript.js
这样的javascript文件,它将会失败。 这是因为当ASP.NET引擎重新执行控件/页面时,它将使用正确生成的客户端ID替换<%= _btnOk.ClientID %>
字符串。 它不会对javascript文件之类的外部文件执行此操作,这意味着<%= _btnOk.ClientID %>
将保留在该文件中,并且JavaScript将正确抛出异常,因为它不知道如何处理该字符串。
方法围绕这个:
<script>
元素中解析页面本身所需的ID,并将其分配给全局变量。 然后加载您的自定义javascript文件,之后可以引用现在已解析的客户端ID。 runat="server"
标记,这将确保ASP.NET将按原样呈现控件而不更改客户端ID。 结束编辑
debugger;
在脚本的新行上,如果您打开了开发控制台,那么将在脚本中的该点停止处理,并且您可以逐步完成此操作。 $(document).ready(function(){/*your code*/});
包装脚本$(document).ready(function(){/*your code*/});
这确保您的脚本在执行之前等待页面完成加载。 _btnOk.toggle(false);
和_btnOk.toggle(true);
分别隐藏和显示按钮。 或者只是btnOk.toggle();
根据当前状态将按钮切换为隐藏或可见。 这是一个自包含的工作示例,以显示JQuery调用本身是正确的。 第二个按钮根据第一个按钮状态隐藏或显示第一个按钮。
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="AspFormTest.Default" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Button
ID="_btnOk"
ClientIDMode="Static"
Text="Ok"
runat="server"/>
</div>
<button type="button" onclick="hideShowButton();">Hide or Show ok button</button>
<button type="button" onclick="hideShowButtonToggle();">Toggle button</button>
</form>
<script src="https://code.jquery.com/jquery-2.2.1.min.js"></script>
<script type="text/javascript" language="javascript">
function hideShowButton() {
var aspNetWayOfResolvingId = $("#<%= _btnOk.ClientID %>"); // use this if clientidmode is not static
var _btnOk = $("#_btnOk");
if(_btnOk.is(":visible"))
_btnOk.hide();
else
_btnOk.show();
}
function hideShowButtonToggle() {
var aspNetWayOfResolvingId = $("#<%= _btnOk.ClientID %>"); // use this if clientidmode is not static
var _btnOk = $("#_btnOk");
_btnOk.toggle();
}
</script>
</body>
</html>
在Asp.net中,您需要使用以下方式调用按钮
$("#<%= _btnOk.ClientID %>");
您也可以使用CSS类。
创建一个虚拟CSS类
<style>
.test{
}
</style>
将此.test
类分配给_btnOk
这样您就可以只隐藏那个按钮而不是_btnCancel
$(".test").hide();
我看到两个会导致hide
功能失败的情况:
调用函数时,按钮的父级已经隐藏( 为什么jQuery UI不隐藏隐藏父级的元素? )
您的butt_orange_small
类样式具有带有!important
标志的display
属性。 一种解决方案是删除!important
标志。 如果出于任何原因,您必须将其保留在类样式中,则可以执行此操作以隐藏按钮:
$("#_btnOk").attr('style','display:none !important');
你必须在jquery加载后调用你的函数。 你可以在你的功能之后加上“()” 。
这是一个例子:
$(function () {
var _btnOk = $("#_btnOk");
_btnOk.hide();
})();
我相信这种方法会很有效:
$(document).ready(function(){
$("button[id*='_btnOk']").hide();
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.