Jquery Change()不处理动态注入的元素

问题描述 投票:1回答:3

我有一个动态生成的<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>
jquery html css jquery-events
3个回答
3
投票

这不是改变事件。您可以使用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>

0
投票

使用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>

-1
投票

使用“输入”事件代替“更改”,如:

$(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>
© www.soinside.com 2019 - 2024. All rights reserved.