如何在jQuery中绑定textarea的change事件?

Lol*_*lly 213 javascript jquery jquery-ui

如果发生任何变化,我想捕获<textarea>.就像键入任何字符(删除,退格)或鼠标单击并粘贴或剪切一样.是否有可以触发所有这些事件的jQuery事件?

我尝试了更改事件,但只有在从组件中跳出后才会触发回调.

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

Bla*_*ter 327

实际上试试这个:

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

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

      if(this.value.length){
        $("#yourBtnID").show();
      }
});
Run Code Online (Sandbox Code Playgroud)

DEMO

这适用于您所做的任何更改,打字,剪切,粘贴.

  • 这些演示使用`<input type ="text">`,而不是`<textarea>` (25认同)
  • 我看到你在DEMO中使用<input type ="textarea"cols ="10"rows ="4"/>,认真吗? (10认同)
  • @Senthilnathan:对我来说也不适用于Chrome和FF,因为它不是`propertychange`而且还有`输入' (5认同)
  • 将'input propertychange'更改为'input change',以便它也可以在IE9中运行.http://paulbakaus.com/2012/06/14/propertychange-on-internet-explorer-9/ (5认同)
  • 请注意,当我在文本区域中按下退格键时,IE9中没有这两个事件都触发(没有检查旧版本的IE). (4认同)
  • IE8中的"x行上的堆栈溢出". (2认同)

SNa*_*Nag 135

bind已弃用.用途on:

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

注意:上面的代码会多次触发,每个匹配的触发器类型一次.要处理这个问题,请执行以下操作:

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!");
});
Run Code Online (Sandbox Code Playgroud)

jsFiddle演示

  • @Sebastialonso:`on("change",function()...`只有当textarea失去焦点时才会被激活**.请参阅我的[之前的问题](http://stackoverflow.com/questions/17317465/ jquery-textbox-change-event-doesnt-fire-until-textbox-lose-focus)为此,并试试[this fiddle](http://jsfiddle.net/6bt2g/55/) - 更改textarea,然后在textarea外部单击,您应该看到更改事件触发. (3认同)
  • ````on on("change",function()....```part对我来说不起作用.不会触发任何警报,也不会触发控制台日志,任何东西.但是,keyup就像魅力一样. (2认同)

Ste*_*ain 75

欢迎来到2015年,我们有一个新的input活动.

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();
  }
});
Run Code Online (Sandbox Code Playgroud)

  • 这个解决方案很有魅力。完美克服了change()和keypress()事件处理程序的限制。非常感谢叉子。 (2认同)

Chr*_*itz 23

有了消息来源,这个问题需要一个更新的答案.这实际上是有效的(虽然你不必接受我的话):

// 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)

}
Run Code Online (Sandbox Code Playgroud)

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

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

更新:如果您碰巧需要在Internet Explorer中使用拖放支持等功能,您可能需要查看pandell最新更新的分支jquery-splendid-textchange.


rap*_*2-h 10

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';
    }
});
Run Code Online (Sandbox Code Playgroud)

HTML

<textarea id="textareaID"></textarea>
<button id="yourBtnID" style="display: none;">click me</div>
Run Code Online (Sandbox Code Playgroud)


kev*_*ber 5

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

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

对于过时的浏览器,您还可以添加selectionchangepropertychange(如其他答案中提到的)。但selectionchange在 IE9 中对我不起作用。这就是我添加的原因keyup