我想捕捉如果发生了任何变化<textarea>。比如输入任何字符(删除,退格)或鼠标点击粘贴或剪切。是否有一个jQuery事件可以触发所有这些事件?

我尝试了更改事件,但它只在从组件tab out后触发回调。

使用:我想启用一个按钮,如果<textarea>包含任何文本。


当前回答

使用输入事件。

var button = $("#buttonId");
$("#textareaID").on('input',function(e){
  if(e.target.value === ''){
    // Textarea has no value
    button.hide();
  } else {
    // Textarea has a value
    button.show();
  }
});

其他回答

试试这个…

$("#txtAreaID").bind("keyup", function(event, ui) {                          

              // Write your code here       
 });

试试这个

 $('textarea').trigger('change');
 $("textarea").bind('cut paste', function(e) { });

.delegate是唯一一个工作到我与jQuery JavaScript库v2.1.1

 $(document).delegate('#textareaID','change', function() {
          console.log("change!");
    });

这是另一个(现代的)版本,但与之前提到的略有不同。经IE9测试:

$('#textareaID').on('input change keyup', function () {
  if (this.value.length) {
    // textarea has content
  } else {
    // textarea is empty
  }
});

对于过时的浏览器,您还可以添加selectionchange和propertychange(如在其他答案中提到的)。但是在IE9中,选择更改对我不起作用。这就是为什么我加了keyup。

不推荐使用Bind。使用:

$("#textarea").on('change keyup paste', function() {
    // your code here
});

注意:上面的代码将触发多次,每个匹配的触发器类型一次。要处理这个问题,可以这样做:

var oldVal = "";
$("#textarea").on("change keyup paste", function() {
    var currentVal = $(this).val();
    if(currentVal == oldVal) {
        return; //check to prevent multiple simultaneous triggers
    }

    oldVal = currentVal;
    //action to be performed on textarea changed
    alert("changed!");
});

jsFiddle演示