使用jquery隐藏asp.net formview中的按钮

时间:2016-03-28 18:53:51

标签: javascript jquery asp.net

我想隐藏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,我需要这样才能保持可见性。

8 个答案:

答案 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 elementctrl+shift+C)。

同样正如我所提到的,其他人也使用<%= _btnOk.ClientID %>这是选择ASP.NET控件的元素id的最佳方法。但是,这只会在.ascx.aspx表单上解析。这意味着如果您使用在页面/控件中引用的MyExternalScript.js之类的javascript文件,它将失败。这是因为当ASP.NET引擎重新执行控件/页面时,它将使用正确生成的客户端ID替换<%= _btnOk.ClientID %>字符串。它不会对javascript文件之类的外部文件执行此操作,这意味着<%= _btnOk.ClientID %>将保留在该文件中,并且JavaScript将正确抛出异常,因为它不知道如何处理该字符串。

围绕这个方法:

  1. <script>元素中解析您想要的页面本身ID,并将其分配给全局变量。然后加载您的自定义javascript文件,之后可以引用现在已解析的客户端ID。
  2. 使用css类作为控件的指针。该类不必具有任何实际的css标记,只需将其添加到控件并从javascript(jquery)引用它。
  3. 如果使用AJAX,则使用纯HTML按钮控件并省略runat="server"标记,这将确保ASP.NET将按原样呈现控件而不更改客户端ID。
  4. 结束修改

    • 您正在将按钮设置为正确隐藏,但这是返回服务器的表单发布操作的一部分。 ASP.NET服务器端代码不会使用表单发布跟踪按钮状态,因此当从服务器重新加载表单时,实际上会重置状态,包括按钮的状态。这使得看起来好像JQuery操作对按钮没有影响。
    • 执行的脚本不止一个,或者您的脚本执行了2次。如果您要触发多个事件设置,则可能会发生这种情况。
    • 在尝试隐藏按钮之前,您没有加载JQuery。确保你有一个JQuery的脚本引用,并且它在脚本之前被加载,这就像确保页面上的顺序是正确的一样简单,JQuery应该在顶部,然后是依赖它的脚本。 / LI>
    • 确保JQuery选择器实际解析。我在下面的示例中提供了两种解决JQuery选择器的方法。
    • 通过在浏览器中调试脚本,确保您的脚本实际正在运行。使用Chrome,您可以使用F12打开开发控制台,找到脚本并设置断点。或者,您也可以在脚本的新行中添加debugger;,如果您打开了开发控制台,则可以在脚本中的该点停止处理,并且您可以逐步完成此步骤。
    • 最后的可能性是您在加载页面时尝试运行脚本,但脚本位于页面顶部而没有准备好文档包装。这意味着您尝试解析尚未在html中加载的按钮。要解决此问题,请使用$(document).ready(function(){/*your code*/});包装脚本,以确保脚本在执行前等待页面完成加载。
    • JQuery版本 - 确保您使用的是最新版本,我认为1.4版本中添加了此功能。
    • 替代显示/隐藏 - 您还可以使用_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函数失败的条件:

  1. 调用函数时,按钮的父级已隐藏(Why doesn't jQuery UI hide element with hidden parent?

  2. 您的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();
});