Найдите элемент управления веб-формами Asp.net в сценарии в файле Js (JavaScript)

У меня есть следующий скрипт в проекте веб-форм:

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)? Приветствую и заранее спасибо.

("<%= TextBox1.ClientID %>") это неверный способ найти элемент в JS, getElementById должна содержать строку без пробелов между ними. также js не поймет, что такое TextBox1.ClientID, если только это не находится на странице aspx.
MHD Alaa Alhaj 18.03.2024 02:22

@MHDAlaaAlhaj - подсказка asp.net

Jaromanda X 18.03.2024 02:25

Отвечает ли это на ваш вопрос? stackoverflow.com/questions/10540217/…

MHD Alaa Alhaj 18.03.2024 02:29

Что такое ID из TextBox1 - вы можете использовать что-то вроде document.querySelector("[id$=whateverTheIDis]")

Jaromanda X 18.03.2024 02:31

попробуйте объявить переменную в вашем js вот так const id = "<%= TextBox1.ClientID %>";, затем console.info(id), если вы правильно получили значение, вы можете использовать document.getElementById(id);

MHD Alaa Alhaj 18.03.2024 02:33

@MHDLaaAlhaj — это предполагает, что ASP.net ID= не поврежден — см. stackoverflow.com/questions/65039/…

Jaromanda X 18.03.2024 02:33

Поскольку файл .js не выполняет какой-либо серверный код, в нем не может быть тегов <% %>. Поэтому вам необходимо использовать какой-то метод, например тот, который предлагается в нескольких комментариях других людей. Например. либо объявите и установите переменную (с идентификатором элемента управления) на вашей странице .aspx, а затем вы сможете ссылаться на эту переменную в своем файле .js. Или, возможно, используйте скрытое поле, установите значение идентификатора вашего элемента управления, а в вашем файле .js получите значение из скрытого поля, которое затем можно использовать в getElementById.

Craig 18.03.2024 02:58

пока ваш TextBox1 находится непосредственно в форме, а не внутри чего-то вроде asp:Content или asp:Panel, попробуйте присвоить вашему TextBox1 атрибут ClientIDMode = "Static", а затем попробуйте document.getElementById("TextBox1");.. другие ответы верны, asp.net не может переписать ваш js-файл напрямую

pthomson 18.03.2024 15:34
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
8
56
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Проблема, конечно, в том, что вы хотите иметь жестко закодированное имя текстового поля, а затем использовать внешний файл .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 означает, что внешний файл не может иметь жестких элементов управления кодом, а также не может использовать или иметь выражения <%=%> (на стороне сервера).

Другие вопросы по теме