我怎样才能绑定到jQuery的textarea的变化事件?

我想要捕获<textarea>发生的任何更改。 就像input任何字符(删除,退格键)或鼠标点击并粘贴或剪切。 有没有可以触发所有这些事件的jQuery事件?

我尝试了更改事件,但只有在从组件中退出后才会触发callback。

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

实际上试试这个:

 $('#textareaID').bind('input propertychange', function() { $("#yourBtnID").hide(); if(this.value.length){ $("#yourBtnID").show(); } }); 

DEMO

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

bind已弃用。 用于:

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

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

 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演示

欢迎来到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(); } }); 

这个问题需要一个更新的答案,来源。 这是实际的工作原理(尽pipe你不必为此付诸表决):

 // 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: 当我们点击BACKSPACE / DEL / CUT时,IE9的input不会触发
3: https : //msdn.microsoft.com/en-us/library/ms536956(v=vs.85).aspx
4: http : //api.jquery.com/prop/#prop-propertyName-function

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

更新:如果您碰巧需要Internet Explorer中的拖放支持等function,则可以改为查看pandell最近更新的jquery-splendid-textchange

尝试着重点做到这一点

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

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

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

对于过时的浏览器,您可能还会添加selectionchangepropertychange (如其他答案中所述)。 但是selectionchange更改在IE9中不适用于我。 这就是为什么我添加keyup

尝试这个 …

 $("#txtAreaID").bind("keyup", function(event, ui) { // Write your code here }); 

.delegate是唯一一个使用jQuery JavaScript Library v2.1.1工作的人

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

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

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

处理任何types的input和select以及textareas忽略箭头键和ctrl,cmd,function键等东西的变化

注意:我只在FF中试过,因为它是用于FF插件的。

尝试这个

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