После вставки текста я хочу получить идентификатор целевого div. Позже divs генерируются динамически, код не работает:
HTML
<div class="wrap">
<div class="entry" id="1" contenteditable="true">paste here</div>
<div class="entry" id="2" contenteditable="true">paste here</div>
<div class="entry" id="3" contenteditable="true">paste here</div>
<div class="entry" id="4" contenteditable="true">paste here</div>
</div>
JS
$('.wrap').on("paste", function(){
console.log("current box ID: " + $(this).attr("id") );
});
Попробуйте использовать родительский класс .wrap
Вам нужно использовать класс .entry
когда вы .entry
этот div
$('.wrap div.entry').on("paste", function(){
console.log("current box ID: " + $(this).attr("id") );
});
Если .entry
создается динамически, вы можете использовать делегирование событий
$(document.body).on('paste','.wrap .entry',function(){
console.log("current box ID: " + $(this).attr("id") );
});
Вам нужно посмотреть на цель события (откуда произошло событие), а затем найти .entry
который обертывает это. Вы не можете смотреть прямо на цель, если хотите поддерживать любую сложную структуру внутри элементов .entry
.
$('.wrap').on('paste', function(event){
console.log('paste id: ' + $(event.target).closest('.entry').attr('id'));
});
Не знаете, почему вы присоединяете событие к "контейнеру". Я считаю, у вас есть 2 варианта
$('.wrap').on("paste", function(e){
console.log("current box ID: " + e.target.id );
});
или
$('.entry').on("paste", function(e){
console.log("current box ID: " + this.id );
});
Я бы пошел со вторым вариантом, так как было более ясно, чтобы связать событие direclty с соответствующими элементами, а не делать это с контейнером и использовать подход e.target
.
Я бы пошел с этим (немного меньше кода, но не так много -
$('.entry').on("paste", function(e){
console.log("current box ID: " + this.id ); // this.id is all you need to get any current id
});
Вы привязываете событие к обертке div, так что this
означает, что в обратном вызове.
Измените привязку к событию:
$('.wrap .entry').on("paste", function(){
console.log("current box ID: " + $(this).attr("id") );
});
Поскольку вы привязали событие "вставить" в класс wrap (который не получил идентификатор атрибута), вы получаете NULL.
Вы должны привязать к нему свои поля ввода, которые имеют атрибут id.
$('.wrap .entry').on("paste", function(){
console.log("current box ID: " + $(this).attr("id") );
});