Jquery Change() 不适用于动态注入的元素

Jquery Change() not working on a dynamically injected element

我有一个动态生成的 <div class="editable"> 元素 contenteditable="true"。我需要在更改此 div 中的文本时触发一个事件。我使用 change() 但它不起作用。但与此同时 blur() 正在为我工​​作。有什么方法可以在 change() 上触发事件吗?

很遗憾,我无法使用 <input><textarea> 等表单元素。

$(document).ready(function () {
  
  //ON CHNAGE
  $('.container').delegate('.editable', 'change', function (){
    alert('fire on change');
  })
  
  //ON BLUR
  $('.container').delegate('.editable', 'blur', function (){
    alert('fire on blur');
  })
});
.editable{
  width: 100px;
  height: 20px;
  line-height:20px;
  border: solid 1px black;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="container">
  <div class="editable" contenteditable="true">editable</div>
</div>

使用 "input" 事件代替 "change",例如:

$(document).ready(function () {
  
  //ON CHNAGE
  $('.container').delegate('.editable', 'input', function (){
    alert('fire on change');
  })
  
  //ON BLUR
  $('.container').delegate('.editable', 'blur', function (){
    alert('fire on blur');
  })
});
.editable{
  width: 100px;
  height: 20px;
  line-height:20px;
  border: solid 1px black;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="container">
  <div class="editable" contenteditable="true">editable</div>
</div>

这不是更改事件。你可以使用input,这是一个只要输入改变就会触发的事件。

也使用 .on 而不是 .delegate。它已被弃用。

$(document).ready(function() {

  //ON CHNAGE
  $('.container').on('input', '.editable', function() {
    console.log('fire on change');
  })

  //ON BLUR
  $('.container').on('blur', '.editable', function() {
    console.log('fire on blur');
  })
});
.editable {
  width: 100px;
  height: 20px;
  line-height: 20px;
  border: solid 1px black;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="container">
  <div class="editable" contenteditable="true">editable</div>
</div>

使用 keyup 事件而不是 'change' 或 'input',因为它会在释放键时触发事件。

$(document).ready(function () {      
  //ON KEYUP
  $('.container').on('.editable', 'keyup', function (){
    alert('fire on change');
  });
});
.editable{
  width: 100px;
  height: 20px;
  line-height:20px;
  border: solid 1px black;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="container">
  <div class="editable" contenteditable="true">editable</div>
</div>