Учитывая этот HTML-код:
<div contenteditable>
....
<span> child-element </span>
....
</div>
Когда пользователь щелкает элемент SPAN (чтобы поместить в него курсор), а затем нажимает символьную клавишу на клавиатуре (для редактирования текстового содержимого элемента SPAN), появляется keydown
, keypress
и keyup
событие будет запущено.
Однако свойство target
этих соответствующих объектов событий является не элементом SPAN, а самим элементом DIV.
Живая демонстрация: (также на jsFiddle)
$('div').keydown(function(e) {
alert( e.target.nodeName );
});
div { border:2px solid red; padding:10px; margin:10px; }
span { background-color:yellow; }
<div contenteditable>
BEFORE
<span>SPAN</span>
AFTER
</div>
<p>
Click on the yellow SPAN element (to place the caret inside it), and then press a character key (to change the text-content of the SPAN element). The alert-box shows that the event-target is the DIV element, not the SPAN element...
</p>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
Как я могу определить, произошло ли ключевое событие внутри элемента SPAN?