[javascript] jQuery에서 텍스트 영역의 변경 이벤트에 어떻게 바인딩 할 수 있습니까?
변경 사항이 있으면 캡처하고 싶습니다 <textarea>
. 모든 문자 (삭제, 백 스페이스)를 입력하거나 마우스를 클릭하여 붙여 넣기 또는 잘라 내기하는 것과 같습니다. 모든 해당 이벤트를 트리거 할 수있는 jQuery 이벤트가 있습니까?
변경 이벤트를 시도했지만 구성 요소에서 탭 아웃 한 후에 만 콜백을 트리거합니다.
사용 : <textarea>
텍스트 가 포함되어 있으면 버튼을 활성화하고 싶습니다 .
답변
실제로 이것을 시도하십시오 :
$('#textareaID').bind('input propertychange', function() {
$("#yourBtnID").hide();
if(this.value.length){
$("#yourBtnID").show();
}
});
데모
변경, 타이핑, 자르기, 붙여 넣기 등 모든 변경 사항에 적용됩니다.
답변
bind
더 이상 사용되지 않습니다. 사용 on
:
$("#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!");
});
답변
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();
}
});
답변
이 질문에는 출처와 함께 최신 답변이 필요했습니다. 이것은 실제로 작동하는 것입니다 (단, 내 말을 할 필요는 없지만).
// 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을 수행 할 때 IE9의 oninput이 실행되지 않음
3 : 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
이벤트 를 얻는 것이 좋습니다 . 페이스 북의 ReactJS에 해당하는 이벤트를 구현 한 동일한 사람 이 개발했으며 ,onChange
거의 전체 웹 사이트에 사용합니다. 그리고 그것이 페이스 북을위한 충분한 솔루션이라면, 아마도 당신에게 충분히 강력 할 것입니다. 🙂
업데이트 : Internet Explorer에서 끌어서 놓기 지원과 같은 기능이 필요한 경우 대신 pandell
최신 업데이트 포크jquery-splendid-textchange
를 확인하십시오 .
답변
JQUERY가없는 2018 년
문제는 JQuery 와 관련 이 있으며 단지 FYI입니다.
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>
답변
여기에 또 다른 (현대) 버전이 있지만 앞에서 언급 한 버전과 약간 다릅니다. IE9로 테스트했습니다.
$('#textareaID').on('input change keyup', function () {
if (this.value.length) {
// textarea has content
} else {
// textarea is empty
}
});
오래된 브라우저의 경우 추가 selectionchange
하고 propertychange
(다른 답변에서 언급했듯이) 추가 할 수 있습니다 . 그러나 selectionchange
IE9에서는 나를 위해 작동하지 않았습니다. 그래서 내가 추가했습니다 keyup
.
답변
포커스 아웃으로 시도하십시오.
$("textarea").focusout(function() {
alert('textarea focusout');
});