У меня есть следующий скрипт в проекте веб-форм:
function myScriptInAspxFile() {
var obj = document.getElementById("<%= TextBox1.ClientID %>");
if (obj) {
obj.value = "My Text";
}
}
это работает нормально, когда я помещаю сценарий в файл aspx веб-форм, но когда я меняю сценарий на файл Js (JavaScript), строка:
var obj = document.getElementById("<%= TextBox1.ClientID %>");
Присваивание возвращает мне нулевое значение для переменной obj. Как я могу найти элемент управления из сценария в файле Js (JavaScript)? Приветствую и заранее спасибо.
@MHDAlaaAlhaj - подсказка asp.net
Отвечает ли это на ваш вопрос? stackoverflow.com/questions/10540217/…
Что такое ID из TextBox1 - вы можете использовать что-то вроде document.querySelector("[id$=whateverTheIDis]")
попробуйте объявить переменную в вашем js вот так const id = "<%= TextBox1.ClientID %>";, затем console.info(id), если вы правильно получили значение, вы можете использовать document.getElementById(id);
@MHDLaaAlhaj — это предполагает, что ASP.net ID= не поврежден — см. stackoverflow.com/questions/65039/…
Поскольку файл .js не выполняет какой-либо серверный код, в нем не может быть тегов <% %>. Поэтому вам необходимо использовать какой-то метод, например тот, который предлагается в нескольких комментариях других людей. Например. либо объявите и установите переменную (с идентификатором элемента управления) на вашей странице .aspx, а затем вы сможете ссылаться на эту переменную в своем файле .js. Или, возможно, используйте скрытое поле, установите значение идентификатора вашего элемента управления, а в вашем файле .js получите значение из скрытого поля, которое затем можно использовать в getElementById.
пока ваш TextBox1 находится непосредственно в форме, а не внутри чего-то вроде asp:Content или asp:Panel, попробуйте присвоить вашему TextBox1 атрибут ClientIDMode = "Static", а затем попробуйте document.getElementById("TextBox1");.. другие ответы верны, asp.net не может переписать ваш js-файл напрямую



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Проблема, конечно, в том, что вы хотите иметь жестко закодированное имя текстового поля, а затем использовать внешний файл .js. Внешние файлы не обрабатываются и не обрабатываются выражениями на стороне сервера.
Здесь есть два подхода:
Используйте clientidMode="static" для текстового поля.
Отсюда это:
<asp:TextBox ID = "TextBox1" runat = "server" ClientIDMode = "Static" >
</asp:TextBox>
И теперь ваш js-код станет таким:
var obj = document.getElementById("TextBox1");
Другой подход?
Поместите ОБА элемент управления и JavaScript внутри пользовательского элемента управления.
Итак, скажите следующее:
<asp:TextBox ID = "TextBox1" runat = "server"></asp:TextBox>
<script>
function mytest() {
var tBox = document.getElementById('<%=TextBox1.ClientID%>')
alert(tBox.value)
}
</script>
Теперь наша разметка становится такой:
<asp:Button ID = "Button1" runat = "server" Text = "Show text box value"
OnClientClick = "mytest();return false"
/>
<br />
<uc1:MyScriptControl runat = "server" id = "MyScriptControl" />
И результат такой:
Конечно, вы также можете разместить несколько небольших заглушек кода js на текущей странице, которая вызывает/использует/использует внешнюю библиотеку кода .js, но, таким образом, вам придется «передавать» значение управления с меньшими заглушками кода на текущей странице.
Итак, скажите следующее:
<script>
function mytestlocal() {
var obj = document.getElementById("<%= TextBox1.ClientID %>");
mytest(obj)
}
</script>
И таким образом во внешнем файле у нас есть это:
function mytest(tBox) {
alert(tBox.value)
}
Итак, «сама» идея внешнего файла .js означает, что внешний файл не может иметь жестких элементов управления кодом, а также не может использовать или иметь выражения <%=%> (на стороне сервера).
("<%= TextBox1.ClientID %>")это неверный способ найти элемент в JS,getElementByIdдолжна содержать строку без пробелов между ними. также js не поймет, что такоеTextBox1.ClientID, если только это не находится на страницеaspx.