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');