我想捕捉如果发生了任何变化<textarea>。比如输入任何字符(删除,退格)或鼠标点击粘贴或剪切。是否有一个jQuery事件可以触发所有这些事件?
我尝试了更改事件,但它只在从组件tab out后触发回调。
使用:我想启用一个按钮,如果<textarea>包含任何文本。
我想捕捉如果发生了任何变化<textarea>。比如输入任何字符(删除,退格)或鼠标点击粘贴或剪切。是否有一个jQuery事件可以触发所有这些事件?
我尝试了更改事件,但它只在从组件tab out后触发回调。
使用:我想启用一个按钮,如果<textarea>包含任何文本。
当前回答
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>
其他回答
试试这个吧:
$('#textareaID').bind('input propertychange', function() {
$("#yourBtnID").hide();
if(this.value.length){
$("#yourBtnID").show();
}
});
DEMO
这适用于你所做的任何更改,输入,剪切,粘贴。
不推荐使用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演示
试着集中精力做这件事
$("textarea").focusout(function() {
alert('textarea focusout');
});
这个问题需要一个更新的答案。这是真正有效的方法(尽管你不必相信我的话):
// 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的分支。
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>