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

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

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


当前回答

试试这个…

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

              // Write your code here       
 });

其他回答

使用输入事件。

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();
  }
});

这个问题需要一个更新的答案。这是真正有效的方法(尽管你不必相信我的话):

// Storing this jQuery object outside of the event callback 
// prevents jQuery from having to search the DOM for it again
// every time an event is fired.
var $myButton = $("#buttonID")

// input           :: for all modern browsers [1]
// selectionchange :: for IE9 [2]
// propertychange  :: for <IE9 [3]
$('#textareaID').on('input selectionchange propertychange', function() {

  // This is the correct way to enable/disabled a button in jQuery [4]
  $myButton.prop('disabled', this.value.length === 0)

}

1: https://developer.mozilla.org/en-US/docs/Web/Events/input Browser_compatibility 2: IE9中的oninput在我们按BACKSPACE / DEL / do CUT时不触发 3: https://msdn.microsoft.com/en-us/library/ms536956 (v = vs.85) . aspx 4: http://api.jquery.com/prop/ prop-propertyName-function

但是,对于一个更全局的解决方案,你可以在整个项目中使用,我建议使用textchange jQuery插件来获得一个新的,跨浏览器兼容的textchange事件。它是由为Facebook的ReactJS实现等效onChange事件的同一个人开发的,他们几乎在整个网站上都使用ReactJS。我认为可以肯定地说,如果它对Facebook来说是一个足够强大的解决方案,它可能对你来说也足够强大。: -)

更新:如果你碰巧需要Internet Explorer中的拖放支持等特性,你可能会想要看看pandell最近更新的jquery-splendid-textchange的分支。

试着集中精力做这件事

$("textarea").focusout(function() {
   alert('textarea focusout');
});

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

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

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

经过一些实验,我想出了这个实现:

$('.detect-change')
    .on('change cut paste', function(e) {
        console.log("Change detected.");
        contentModified = true;
    })
    .keypress(function(e) {
        if (e.which !== 0 && e.altKey == false && e.ctrlKey == false && e.metaKey == false) {
            console.log("Change detected.");
            contentModified = true;
        }
    });

处理对任何类型的输入和选择的更改,以及忽略方向键和ctrl, cmd,功能键等的文本区域。

注意:我只在FF中尝试过,因为这是一个FF插件。