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

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

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


当前回答

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

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

其他回答

试试这个…

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

              // Write your code here       
 });

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

$('.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插件。

试着集中精力做这件事

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

不推荐使用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演示

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>