#javascript #jquery #function
#javascript #jquery #функция
Вопрос:
Я пытаюсь очистить значок ошибки при нажатии клавиши.
** РЕДАКТИРОВАТЬ — добавление HTML **
<input class="validate" type="text" data-type="string" id="address" />
<input class="validate" type="text" data-type="number" id="zip" />
** ЗАВЕРШЕНИЕ РЕДАКТИРОВАНИЯ — Не уверен, поможет ли это пролить некоторый свет **
В настоящее время ошибка отображается с использованием этой функции:
function validateFields(){
$(".validate").blur(function(){
var status = "";
var label = this.id;
var value = this.value;
if(value != ""){
status = "good";
console.log("status " status);
}
else{
status = "error";
console.log("status " status);
}
if(status == "good"){
label.html(label.html() ' amp;#9989;');
}
if(status == "error"){
label.html(label.html() ' amp;#10060;');
}
});
}
Если статус равен ошибке, покажите значок ошибки.
Итак, теперь я хочу устранить ошибку при нажатии пользователем клавиш. Вот моя попытка:
function clearError(){
$(".validate").keydown(function(){
var datatype = $(this).data("type");
var label = this.id;
label.html(label.html() ' ');
});
}
Очевидно, что я не добился большого успеха в устранении ошибки с помощью вышеупомянутой функции keydown.
Как я могу заставить это работать?
Комментарии:
1. Примечание сбоку:
$(this).attr('id')
должно быть простоthis.id
2. Кроме того, в этом
clearError
методе довольно много неиспользуемых переменных.3. И затем, еще две вещи.
status
устанавливается на «хорошо» и никогда не изменяется. Итак,if
бессмысленно. И затем вы устанавливаете значение метки html, равное тому, что представляет собой метка html. Фактически,var x = x ' ';
это не имеет смысла.4. @Taplar — обновлено. Есть мысли о том, как устранить ошибку?
5. Тогда я бы предложил поместить интервал вокруг ошибки, чтобы ваша разметка была такой
<label>Whatever this is <span class="error"></span></label>
, и в этом случае настройка и удаление ошибки должны быть нацелены только на интервал и ни на что другое.
Ответ №1:
Бизнес с ярлыками, связанный с попыткой сохранить текст внутри, не очень интуитивно понятен, поэтому я добавил span к вашему ярлыку, чтобы вы удаляли и добавляли символы ошибок из span
в своих функциях. Кроме того, у вас был некоторый ненужный код, который можно было удалить в обеих функциях. Например, ваши if
инструкции, проверяющие статус, были ненужными, поскольку вы уже проверили, было ли значение пустым (где вы установили статус), поэтому вы могли бы переместить этот код в if
инструкцию, проверяющую наличие пустых значений.
Мы устанавливаем для каждого соответствующего span
идентификатора идентификатор ввода с «Span» id="testSpan"
, чтобы он мог быть легко доступен с помощью функций JS. Помните, что функции внутри jQuery this
всегда ссылаются на объект, отличный от jQuery, поэтому вы можете использовать для него ванильные методы JS.
Это то, что я мог придумать:
$(".validate").blur(function () {
var id = this.id; // get id
if (this.value != "") { // check if input is empty
document.getElementById(id "Span").innerHTML = 'amp;#9989;'; //set ok symbol
console.log("good");
} else {
document.getElementById(id "Span").innerHTML = 'amp;#10060;'; // set error symbol
console.log("error empty text");
}
});
$(".validate").keydown(function () {
// if value is empty set error symbol, otherwise nothing (keep ok symbol)
if (this.value === "") document.getElementById(this.id "Span").textContent = "";
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<label for="test">test<span id="testSpan"></span></label>
<input id="test" class="validate">
<label for="test2">test<span id="test2Span"></span></label>
<input id="test2" class="validate">
Комментарии:
1. Я получаю следующую ошибку: Uncaught TypeError: не удается установить для свойства ‘innerHTML’ значение null в HTMLInputElement.<анонимный>
2. Вы получили правильный идентификатор? Обычно это означает, что элемент с идентификатором не существует. Возможно, придется отредактировать вопрос и вставить свой код.
3. @JohnBeasley помогло это или нет?