У меня есть следующий div в моем HTML-коде:
<div id="expanderInput" tabIndex="1" contentEditable></div>
Я использую div contentEditable как простой кросс-браузерный метод создания автоматически расширяющегося текстового поля. Я также делаю проверку ввода того, что пользователь вводит в этот div. Предполагается, что это список адресов электронной почты, разделенных запятыми. Когда пользователь пытается предоставить неверную информацию, мой JavaScript разбивает входные данные и выделяет красным цветом все неправильные фрагменты.
//split the address into the comma-separated chunks
var chunks = splitForward(forwardsTo);
//Grab each bad chunk one at a time and stick it in a span with a red-colored text
for(var i = 0; i < invalids.length; i++)
{
var current = chunks[invalids[i]];
current = '<span class="highlighted">' + current + '</span>';
chunks[invalids[i]] = current;
}
$("#expanderInput").html(chunks.join());
initHighlighted();
Массив «инвалиды» содержит индексы всех плохих блоков. Все до этого момента работает отлично. Но как только пользователь начинает печатать внутри красного текста, мне нужно, чтобы красный исчез, но только в этом диапазоне. Например, если есть два поврежденных блока, каждый из которых выделен красным, и пользователь начинает исправлять один, другой должен остаться красным.
Я пытался подключить прослушиватель событий к диапазонам:
initHighlighted = function()
{
$(".highlighted").keypress(function()
{
alert("It works!");
});
};
Но событие никогда не происходит, даже когда пользователь редактирует текст красным цветом. Используя инструменты разработчика браузера, я вижу, что есть обработчик событий, он просто никогда не отключается. Это атрибут contentEditable в div, вызывающий промежуток от получения события? Я также попытался сделать сами промежутки contentEditable, но поведение остается тем же.