我想隐藏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();
});
但它不起作用。如果我调试此脚本,我发现即使在hidden
调用之后,_btnOk
对象的.hide()
属性仍然为false。
BTW我无法使用类引用隐藏按钮,因为它也会隐藏_btnCancel
,我需要这样才能保持可见性。
答案 0 :(得分:4)
你的问题是asp:FormView创建了一个 iframe 。
所以jquery找不到你的按钮, 因为它不在主框架中。
如this教程中所述, 要使用jquery访问iframe中的元素,您必须执行以下操作:
$("#_fvMain").contents().find("#_btnOk").hide();
参考: this回答。
答案 1 :(得分:1)
尝试按下这样的按钮:
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
LoginPath = new PathString("/Account/Login"),
ExpireTimeSpan = TimeSpan.FromMinutes(45),
Provider = new CookieAuthenticationProvider
{
// Enables the application to validate the security stamp when the user logs in.
// This is a security feature which is used when you change a password or add an external login to your account.
OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, User>(
validateInterval: TimeSpan.FromMinutes(30),
regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager))
}
});
答案 2 :(得分:1)
$(function () {
$('#contenitore input[type="button"][value="Ok"]').hide();
});
答案 3 :(得分:1)
您的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*/});
包装脚本,以确保脚本在执行前等待页面完成加载。_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>
答案 4 :(得分:1)
在Asp.net中,您需要使用以下方式调用按钮
$("#<%= _btnOk.ClientID %>");
您也可以通过CSS类使用。
创建虚拟CSS类
<style>
.test{
}
</style>
将此.test
课程分配到_btnOk
,这样您就可以只隐藏不是_btnCancel
$(".test").hide();
答案 5 :(得分:1)
我看到两个导致hide
函数失败的条件:
调用函数时,按钮的父级已隐藏(Why doesn't jQuery UI hide element with hidden parent?)
您的butt_orange_small
类样式的display
属性带有!important
标记。一种解决方案是删除!important
标志。如果出于任何原因,您必须将其保留在类样式中,则可以执行此操作以隐藏按钮:
$("#_btnOk").attr('style','display:none !important');
答案 6 :(得分:1)
你必须在jquery加载后调用你的函数。你可以在你的功能之后加上“()”。
这是一个例子:
$(function () {
var _btnOk = $("#_btnOk");
_btnOk.hide();
})();
答案 7 :(得分:1)
我相信这种方法会很有效:
$(document).ready(function(){
$("button[id*='_btnOk']").hide();
});