2017-04-17 31 views
0

我只是想要keyup,甚至工作在孩子上,但不是在父母,只是顯示在下面的例子,它在父母上,但不是在孩子上。可編輯DIV的孩子上的鍵盤事件

這裏是我的jQuery:

// This works 
$('#editor').on('keyup change', function(){ 
    console.log('keyup event works on Parent'); 
}); 

// This doesn't do anything 
$('#editor').on('keyup change', '.js-selected-text', function(){ 
    console.log('How to make keyup event work for child'); 
}); 

這裏是我的標記,類孩子js-selected-text將動態地添加,所以我用.on()綁定。

<div id="editor" class="wysihtml5-editor" contenteditable="true">Lorem <span class="js-selected-text">Ipusum</span> dolo solo polo</div> 
+1

'event.stopPropagation()'兒童事件處理程序。 – Tushar

+0

@Tushar我試過了,但沒有工作。 – Syed

回答

0

通過使用DOMSubtreeModified你可以做到這一點。

$("#editor").on('DOMSubtreeModified', ".js-selected-text", function() { 
 
    console.log('How to make keyup event work for child'); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="editor" class="wysihtml5-editor" contenteditable="true">Lorem <span class="js-selected-text">Ipusum</span> dolo solo polo</div>

+0

感謝您的回答,您的代碼有效,但對我有問題。當我點擊一個按鈕時,我將獲取'#editor'中所有'.js-selected-text',類'.js-selected-text'和'span'包裝到文本中。不知何故,現在當我點擊按鈕時,'.js-selected-text'內的文本被取出兩次。有沒有辦法保持鍵盤事件或其他任何東西比'DOMSubtreeModified' – Syed

0

試試下面的代碼

採取看看Detect keyup event of contenteditable child whose parent is a contenteditable div

HTML

<div id="editor" class="wysihtml5-editor" contenteditable="true"> 
    Lorem 
    <span contenteditable="false"> 
     <span class="js-selected-text" contenteditable="true"> 
      Ipusum 
     </span> 
    </span> 
    dolo solo polo 
</div> 

jQuery的

// This works 
$('#editor').on('keyup change', function(){ 
    console.log('keyup event works on Parent'); 
}); 

// This doesn't do anything 
$('#editor').on('keyup change', '.js-selected-text', function(e){ 
    console.log('How to make keyup event work for child'); 
    e.stopPropagation(); 
}); 

這裏是工作的jsfiddle:https://jsfiddle.net/gg456p7a/

+0

感謝您的答案。正如我所提到的那樣,'js-selected-text'被動態添加並假定我無法添加額外的包裝''。 – Syed