我想捕捉如果发生了任何变化<textarea>。比如输入任何字符(删除,退格)或鼠标点击粘贴或剪切。是否有一个jQuery事件可以触发所有这些事件?
我尝试了更改事件,但它只在从组件tab out后触发回调。
使用:我想启用一个按钮,如果<textarea>包含任何文本。
我想捕捉如果发生了任何变化<textarea>。比如输入任何字符(删除,退格)或鼠标点击粘贴或剪切。是否有一个jQuery事件可以触发所有这些事件?
我尝试了更改事件,但它只在从组件tab out后触发回调。
使用:我想启用一个按钮,如果<textarea>包含任何文本。
当前回答
这个问题需要一个更新的答案。这是真正有效的方法(尽管你不必相信我的话):
// 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的分支。
其他回答
试试这个吧:
$('#textareaID').bind('input propertychange', function() {
$("#yourBtnID").hide();
if(this.value.length){
$("#yourBtnID").show();
}
});
DEMO
这适用于你所做的任何更改,输入,剪切,粘贴。
试试这个
$('textarea').trigger('change');
$("textarea").bind('cut paste', function(e) { });
试试这个…
$("#txtAreaID").bind("keyup", function(event, ui) {
// Write your code here
});
不推荐使用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演示
这是另一个(现代的)版本,但与之前提到的略有不同。经IE9测试:
$('#textareaID').on('input change keyup', function () {
if (this.value.length) {
// textarea has content
} else {
// textarea is empty
}
});
对于过时的浏览器,您还可以添加selectionchange和propertychange(如在其他答案中提到的)。但是在IE9中,选择更改对我不起作用。这就是为什么我加了keyup。