JavaScript getElementById для ASP.NET Control возвращает null?

Я использую JavaScript, и эта ошибка появляется во время выполнения:

Microsoft JScript runtime error: 'document.getElementById(...)' is null or not an object

этот мой код:

<asp:Content ID="content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
<script language="javascript" type="text/javascript">
    function ConfirmTransfere() {
        if (confirm("Syatem not allow negative inventory, would you like to continue ?") == true) {
            document.getElementById("btnAlelrt").click();

        }       
}
</script>
<asp:ScriptManager ID="ScriptManager1" runat="server">
    </asp:ScriptManager>
    <asp:UpdatePanel ID="uxContainer" runat="server">
    <ContentTemplate>
 <table> 
<tr>
        <td>
        <asp:Button ID="uxTransfer" runat="server" Text="Transfer" OnClick="uxTransfer_Click" /> 
        <asp:Button ID="btnAlelrt" runat="server" Text="GetDetails" OnClick="btnAlelrt_Click" />       
        </td>
        </tr>
</table>
    </ContentTemplate>
<Triggers>
    <asp:PostBackTrigger ControlID="uxTransfer" />    
    </Triggers>
    </asp:UpdatePanel>

 </asp:Content>

Ответ 1

Это:

function ConfirmTransfere() {
        if (confirm("Syatem not allow negative inventory, would you like to continue ?") == true) {
            document.getElementById("btnAlelrt").click();

        }       

должно быть следующим:

function ConfirmTransfere() {
        if (confirm("Syatem not allow negative inventory, would you like to continue ?") == true) {
            document.getElementById('<%=btnAlert.ClientID%>').click();

        }     

Проблема в том, что ваша кнопка является элементом управления ASP.Net и будет генерировать собственный идентификатор клиента, который будет отличаться от указанного вами идентификатора. вставляя код <%=btnAlert.ClientID%> Вывешиваем сгенерированный код в браузер.

Ответ 2

Вы можете использовать это:

document.getElementById('<%= btnAlelrt.ClientID %>').click()

Начиная с ASP.NET 4.0 вы можете использовать свойство ClientIDMode для вашего элемента. И если вы установите его в Static, то значение ClientID будет установлено в значение свойства ID:

<asp:Label ID="Label1" runat="server" ClientIDMode="Static" />

будет отображаться как нечто подобное:

<span id="Label1" name="ctl00$MasterPageBody$ctl00$Label1" />

Ответ 3

Идентификатор, который вы укажете asp: Button - это идентификатор, который используется на сервере через ASP.Net. Это не идентификатор, который используется клиентом script.

Вы должны использовать:

document.getElementById("<%= btnAlelrt.ClientID %>").click();

Ответ 4

Если вы просматриваете источник на сгенерированной странице, вы, скорее всего, обнаружите, что кнопка больше не имеет идентификатора "btnAlelrt". Он может иметь что-то вроде "ctl001_btnAlert" или какой-либо другой сгенерированный идентификатор уникальности.

Вот почему ваш javascript не находит его.

Вам нужно либо выполнить поиск по тегу, либо проверить идентификаторы, чтобы узнать, заканчиваются ли они в btnAlelrt, или вам придется разместить вокруг него DIV или SPAN с идентификатором, который не будет изменен (т.е. doesn 't есть runat = "server" ). Затем вы можете найти этот элемент по его идентификатору, а затем получить его внутри.

Если вы можете, вы можете использовать синтаксис <% = btnAlelrt.ClientID% > , чтобы вставить правильный идентификатор в свой javascript.

(SIDENOTE: должно ли это быть btnAlert?)

Ответ 5

Если вы посмотрите на визуализированную страницу, элемент управления btnAlelrt больше не имеет этого имени...

Если вы добавите "<% =", вы сможете получить доступ к имени С# элемента управления, и оно должно работать.

Ответ 6

Я не могу найти образец кода для публикации для вас в данный момент, но я могу объяснить, что у вас есть проблема.

ASP.NET не использует идентификатор, который вы передаете объекту/элементу/, когда он записывает его на страницу, вместо этого он предоставляет объекту идентификатор клиента.

Если вы введете Msgbox (btnAlelrt.clientID) в свой код, вы увидите имя объекта, который должен использовать ваш javascript.

Лучше иметь код .NET, чтобы записать эти значения в javascript на страницу, поскольку они не являются константами.

Надеюсь, что это поможет.

Джеймс

Ответ 7

попробуйте использовать ClientIDMode = "Static". это не изменит идентификатор кнопки во время выполнения.

  <asp:Button ID="SendMessageButton" ClientIDMode="Static" runat="server" Text="Send Message" CssClass="buttonPositive"
            CausesValidation="True" OnClientClick="validate();" OnClick="SendMessageButton_Click" />

Затем вы можете использовать ниже jquery для доступа к вашей кнопке. Надеюсь, это поможет.

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