为什么这个Javascript没有启用此文本框(aspx)?

时间:2013-09-26 22:31:09

标签: javascript jquery asp.net

感谢您花一点时间来看看这个。我知道大多数客户端脚本这很容易。无论如何,我只想在顶部发出一条消息,警告用户他们的点击已被注册并禁用该按钮。

< ---- CODE BELOW ---->

<asp:Content ID="Content1" runat="server" ContentPlaceHolderID="content">
<div>
    <asp:TextBox BorderStyle="None" Font-Bold="True" Height="15" Width="300"
                    ForeColor="Green" runat="server" ID="MessageBox" Visible="False" Text="Archiving compliance results..."></asp:TextBox>
</div>
<table cellpadding="0" cellspacing="0">

  <Table STUFF!> ....
                    <span>
                        <asp:ImageButton ID="ArchiveImageButton" runat="server" AlternateText="Archive Compliance"
                            ImageUrl="~/images/Icons/24/452-bank.gif" OnClientClick="archiveIt()" OnClick="btnArchive_Click" ToolTip="Archive compliance results" />
                    </span>
  </Table STUFF!>
</table>

<script language="javascript" type="text/javascript">
    function archiveIt() {
        window.ArchiveImageButton.enabled = false;
        window.MessageBox.visible = true;
    }
</script>

3 个答案:

答案 0 :(得分:1)

有两个问题。首先,您需要使用getElementById来获取元素。 window.ElementId无效:

var element = document.getElementById('myId');

其次,您的控件具有服务器端ID 。当它们呈现给客户端时,ID会有所不同。有两种方法可以解决这个问题。一,获得ClientID属性:

var element = document.getElementById('<%= MyControl.ClientID %>');

或者两个,在控件上将ClientIDMode设置为静态:

<asp:TextBox ID="MyTextBox" ClientIDMode="Static" runat="Server" />

然后你可以使用:

var element = document.getElementById('MyTextBox');

另请注意,<input>控件没有visible属性。你可能想要.style.display

因此,您的代码应该类似于:

<script language="javascript" type="text/javascript">
    function archiveIt() {
        document.getElementById('<%= ArchiveImageButton.ClientID %>').enabled = false;
        document.getElementById('<%= MessageBox.ClientID %>').style.display = 'inherit';
    }
</script>

答案 1 :(得分:0)

ID可能不是您所期望的; ASP用其容器包装ID(如Container_ActiveImageButton)。怎么样:

<script>
  function archiveIt(){
    var aib = document.getElementById('<%= this.ArchiveImageButton.ClientID; %>');
    aib.enabled = false;
  }
</script>

或者,您可以在控件上使用ClientIDMode并将其设为Static

答案 2 :(得分:0)

您需要在两个控件上设置ClientIDModeStatic,以避免在其ID上添加额外内容