#javascript #html #asp.net-core
#javascript #HTML #asp.net-core
Вопрос:
У меня есть несколько входных данных, которые генерируются в моем контроллере. Кроме того, связанные javascripts генерируются в контроллере. На изображении ниже показаны входные данные.
Идея в том, что если я оставлю какой-либо из элементов управления, а элемент управления пуст, то под ним появится сообщение. Все элементы управления, кроме первого (который представляет собой вводимый текст), работают. Я не могу понять, почему первый не работает. Есть какие-нибудь предложения?
Ниже приведены html и javascript. Текстовый элемент управления:
<input
onfocusout="ControlId1()"
id="ControlId1"
data-val="true"
name="ProcessFields[0].StringValue"
ejs-for="true"
class="e-control e-textbox e-lib e-input"
type="text"
role="textbox"
value=""
>
Выпадающий элемент управления:
<select aria-hidden="true" tabindex="-1" class="e-ddl-hidden" name="ProcessFields[2].StringValue" id="ControlId32_hidden" data-val="true"><option selected="" value="">null</option></select>
<input onfocusout="ControlId32()" id="ControlId32" data-val="true" ejs-for="true" class="e-control e-dropdownlist e-lib e-input" role="textbox" type="text" readonly="" style="" aria-disabled="false" aria-label="undefined" tabindex="-1">
Часть Javascript для 2 элементов управления:
function ControlId1() {
var x = document.getElementById('ControlId1');
console.log(x);
if (x.value === '') {
document.getElementById('ControlIdWarningId1').style.display = 'block';
} else {
document.getElementById('ControlIdWarningId1').style.display = 'none';
}
}
function ControlId32() {
var x = document.getElementById('ControlId32');
console.log(x);
if (x.value === '') {
document.getElementById('ControlIdWarningId32').style.display = 'block';
} else {
document.getElementById('ControlIdWarningId32').style.display = 'none';
}
}
Двумя элементами для отображения сообщения являются:
<div class="bg-danger" style="display:none" id="ControlIdWarningId1">a</div>
<div class="bg-danger" style="display: block;" id="ControlIdWarningId32">6</div>
—-ОБНОВИТЬ—
Когда я открываю страницу, я получаю следующую информацию в консоли (не совсем понятно, что с ней делать). Кроме того, когда я покидаю элемент управления текстовым полем, выпадающий список и richtexteditor, я получаю еще 3 сообщения (также ниже).
При открытии страницы:
Some messages have been moved to the Issues panel.
jquery.min.js:2 [Deprecation] Synchronous XMLHttpRequest on the main thread is deprecated because of its detrimental effects to the end user's experience. For more help, check https://xhr.spec.whatwg.org/.
send @ jquery.min.js:2
ajax @ jquery.min.js:2
w._evalUrl @ jquery.min.js:2
Re @ jquery.min.js:2
append @ jquery.min.js:2
(anonymous) @ jquery.min.js:2
z @ jquery.min.js:2
html @ jquery.min.js:2
(anonymous) @ jquery.min.js:2
u @ jquery.min.js:2
fireWith @ jquery.min.js:2
k @ jquery.min.js:2
(anonymous) @ jquery.min.js:2
load (async)
send @ jquery.min.js:2
ajax @ jquery.min.js:2
w.fn.load @ jquery.min.js:2
(anonymous) @ 1:16
e @ jquery.min.js:2
t @ jquery.min.js:2
setTimeout (async)
(anonymous) @ jquery.min.js:2
c @ jquery.min.js:2
fireWith @ jquery.min.js:2
fire @ jquery.min.js:2
c @ jquery.min.js:2
fireWith @ jquery.min.js:2
ready @ jquery.min.js:2
B @ jquery.min.js:2
VM439:6 Uncaught TypeError: Cannot read property 'addEventListener' of null
at <anonymous>:6:24
at m (jquery.min.js:2)
at Re (jquery.min.js:2)
at w.fn.init.append (jquery.min.js:2)
at w.fn.init.<anonymous> (jquery.min.js:2)
at z (jquery.min.js:2)
at w.fn.init.html (jquery.min.js:2)
at Object.<anonymous> (jquery.min.js:2)
at u (jquery.min.js:2)
at Object.fireWith [as resolveWith] (jquery.min.js:2)
(anonymous) @ VM439:6
m @ jquery.min.js:2
Re @ jquery.min.js:2
append @ jquery.min.js:2
(anonymous) @ jquery.min.js:2
z @ jquery.min.js:2
html @ jquery.min.js:2
(anonymous) @ jquery.min.js:2
u @ jquery.min.js:2
fireWith @ jquery.min.js:2
k @ jquery.min.js:2
(anonymous) @ jquery.min.js:2
load (async)
send @ jquery.min.js:2
ajax @ jquery.min.js:2
w.fn.load @ jquery.min.js:2
(anonymous) @ 1:16
e @ jquery.min.js:2
t @ jquery.min.js:2
setTimeout (async)
(anonymous) @ jquery.min.js:2
c @ jquery.min.js:2
fireWith @ jquery.min.js:2
fire @ jquery.min.js:2
c @ jquery.min.js:2
fireWith @ jquery.min.js:2
ready @ jquery.min.js:2
B @ jquery.min.js:2
Когда я покидаю текстовое поле:
1:73 Неперехваченная ошибка типа: ControlId1 не является функцией
в HTMLInputElement.onfocusout (1:73)
onfocusout @ 1:73
И в выпадающем списке (который на самом деле работает):
<input onfocusout="ControlId32()" id="ControlId32" data-val="true" ejs-for="true" class="e-control e-dropdownlist e-lib e-input" role="textbox" type="text" readonly="" style="" aria-disabled="false" aria-label="undefined" tabindex="-1">
и редактор richtext (который тоже работает:
1:111 Uncaught TypeError: ControlId3 is not a function
at HTMLTextAreaElement.onfocusout (1:111)
at Af (VM651 ej2.min.js:10)
at t.blurHandler (VM651 ej2.min.js:10)
onfocusout @ 1:111
Af @ VM651 ej2.min.js:10
t.blurHandler @ VM651 ej2.min.js:10
1:260 <textarea onfocusout="ControlId3()" id="ControlId3" data-val="true" name="ProcessFields[3].HTMLStringValue" ejs-for="true" class="e-rte-hidden"></textarea>
Наконец-то я нашел причину, но я все еще не понимаю. Я использовал инструмент, который показал Фил, скопировал всю страницу и медленно удалил все. Это работает, как только я удаляю тег. Почему это так? И почему только ввод текста не работает с тегом формы, в то время как остальные работают с тегом формы. И, наконец, как я могу заставить вводимый текст работать с тегом формы?
Я также попробовал это с помощью Фила, его кода и добавления формы, и там тоже не работает:
<form method="post"><input
onfocusout="ControlId1()"
id="ControlId1"
data-val="true"
name="ProcessFields[0].StringValue"
ejs-for="true"
class="e-control e-textbox e-lib e-input"
type="text"
role="textbox"
value=""
> </form>
<div class="bg-danger" style="display:none" id="ControlIdWarningId1">a</div>
Таким образом, есть какие-либо предложения, как заставить входной тег с onfocusout работать внутри тега?
Комментарии:
1. Где ваш элемент с
id="ControlIdWarningId1"
?2. Где этот элемент в вашем примере?
id="ControlIdWarningId32"
?3. Забыл добавить их в описание. Добавил их сейчас.
4. Здесь работает нормально ~ jsfiddle.net/h2m7x6yv . Видите ли вы какие-либо ошибки в консоли инструментов разработчика вашего браузера?
5. Привет, Фил, обновил информацию. Не уверен, почему я получаю эти сообщения.