Я создал UserControl, который хочу использовать на нескольких страницах. Этот элемент управления содержит классический javascript, но по какой-то причине он не загружает элемент в переменную. Идентификаторы клиентов выглядят нормально.
Это кнопка, активирующая javascript:
<input type = "submit" name = "ctl00$ContentPlaceHolder1$ContactList$btn_NewContact" value = "Potvrdit" onclick = "javascript:return CheckContactName();" id = "ContentPlaceHolder1_ContactList_btn_NewContact" class = "MyButton" style = "color:white;" />
Это текстовое поле:
<input name = "ctl00$ContentPlaceHolder1$ContactList$con_fullname" type = "text" id = "ContentPlaceHolder1_ContactList_con_fullname" class = "MyTextBox" />
Это функция Javascript:
function CheckContactName() {
name = document.getElementById("ContentPlaceHolder1_ContactList_con_fullname");
if (name.value == '' | name.value == null) {
return false;
}
UploadContact();
return true;
}
Теперь, когда я отлаживаю это в консоли, name.value не определен. Сама переменная название - это просто "[объект HTMLInputElement]".
Итак, независимо от того, что находится в этом текстовом поле, эта функция всегда ложна. Я также проверил все идентификаторы на конечной странице клиента, и на них нет дубликатов. Вы можете сказать, почему это так? Спасибо.
Проблема в том, что в моем файле .aspx я использую такую кнопку: <asp: Button ID = "btn_NewContact" runat = "server" Text = "Potvrdit" CssClass = "MyButton" style = "color: white;" OnClientClick = "javascript: return CheckContactName ();" OnClick = "btn_NewContact_Click" /> OnClientClick возвращает false, он не должен выполнять обратную передачу
хорошо ... вы включили viewstate на контроле. page или global в проекте.
нет, я должен это сделать?
да попробуйте. в вашем элементе управления или непосредственно в текстовом поле, если это asp: textbox



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


Я полагаю, вы правильно установите значение ввода в коде?
В любом случае вы можете попробовать использовать document.querySelector, и кажется, что ваш логический оператор неправильный, вы используете | вместо ||.
function CheckContactName() {
let name = document.querySelector(
'#ContentPlaceHolder1_ContactList_con_fullname'
);
if ((name.value == '') || (name.value == null) || (name == undefined)) {
return false;
}
UploadContact();
return true;
}
Нет, я не устанавливаю значение в коде позади и "|" просто сначала попробует первое выражение, если оно ложно, другое ему будет наплевать. Я изучу querySelector.
Это работает в Javascript? Насколько я знаю, в C# он работает, но никогда не тестировал его на Javascript.
Тем не менее, значение в любом случае не определено
Изменен название на cname.
Кажется, что когда вы используете элемент управления на странице, которая уже содержит некоторую функцию JavaScript, и эта функция объявляет переменную с тем же именем, что и имя в usercontrol - это происходит.
Но как этого избежать?
попробуйте установить тип ввода, чтобы кнопка не отправляла. Поскольку приложение submit в веб-формах будет выполнять обратную передачу, это может быть проблемой вашей проблемы.