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

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

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


当前回答

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

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

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

其他回答

试试这个

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

试试这个吧:

$('#textareaID').bind('input propertychange', function() {

      $("#yourBtnID").hide();

      if(this.value.length){
        $("#yourBtnID").show();
      }
});

DEMO

这适用于你所做的任何更改,输入,剪切,粘贴。

2018,没有JQUERY

这个问题是关于JQuery的,这只是供参考的。

JS

let textareaID = document.getElementById('textareaID');
let yourBtnID = document.getElementById('yourBtnID');
textareaID.addEventListener('input', function() {
    yourBtnID.style.display = 'none';
    if (textareaID.value.length) {
        yourBtnID.style.display = 'inline-block';
    }
});

HTML

<textarea id="textareaID"></textarea>
<button id="yourBtnID" style="display: none;">click me</div>

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

// 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');
});