onPropertyChange onChange onInput 이벤트
<textarea name="textarea" id="textarea" onpropertychange="autoExtend(this)" oninput="autoExtend(this)"> ...</textarea>
function autoExtend(obj){
obj.style.height = obj.scrollHeight + "px";
}
트리거 이벤트는 왜 호환성이 더 좋은
onchange
를 선택하지 않습니까?먼저 onchange
, onpropertychange
, oninput
이 세 사건 핸들(Event Handlers)이 어떤 차이가 있는지 알아야 한다.onchange
트리거 이벤트는 반드시 두 가지 조건을 만족시켜야 한다. 1. 현재 대상의 속성이 바뀌고 키보드나 마우스 이벤트가 자극하는 것(스크립트 트리거는 무효), 2. 현재 대상이 초점을 잃는 것(onblur).onpropertychange
면 현재 대상의 속성이 바뀌면 이벤트를 촉발하기 때문에 용도가 더욱 광범위하지만 IE only가 아쉽다.oninput
는 onpropertychange
의 비IE 브라우저 버전으로 Firefox와opera 등 브라우저를 지원하지만 조금 다르다. 대상에 귀속될 때 이 대상의 모든 속성 변화가 이벤트를 촉발하는 것은 아니다. 내가 알기로는 대상value
의 값이 바뀔 때만 효과가 나타난다.테스트 코드는 다음과 같습니다. 비IE 호환성:
텍스트 상자에 데이터를 입력할 때 키보드를 누르고 놓을 때 onkeyup을 사용하여 이벤트를 감지할 수 있습니다. onpropertychange는 매번 변경 사항을 포착할 수 있고, onchange는 어떤 이벤트를 실행해야만 포착할 수 있습니다.그러나 때때로 우리가 데이터를 입력하는 것은 키보드 입력이 아니라 붙이는 방식을 사용하기 때문에 텍스트 상자 상태의 변화를 실시간으로 검사해야 한다.onpropertychange는 Firefox에서 지원하지 않습니다. Firefox에서 정상적으로 사용하려면oninput 속성을 사용하고ddEventListener로 이벤트를 등록해야 합니다.
document.getElementById('msg').innerHTML='입력한 텍스트 길이는'+document.getElementById('txt').value.length; }//Firefox에서 상태 변경을 감지하려면oninput만 사용할 수 있고, 이벤트를 등록하려면ddEvent Listener가 필요합니다.if (/msie/i.test (navigator.userAgent)//ie 브라우저 {
document.getElementById('txt').onpropertychange=handle}else {//비ie 브라우저, 예를 들어Firefox document.getElementById('txt').addeventListener('input',handle,false);}
<html>
<body>
<div>oninput </div>
<div id="testdiv"><input id='tx1' name="tx1" value="" /></div>
</body>
</html>
<script language="JavaScript">
<!--
function getOs(){//
var OsObject = "";
if(navigator.userAgent.indexOf("MSIE")>0) {
return "MSIE";
}
if(isFirefox=navigator.userAgent.indexOf("Firefox")>0){
return "Firefox";
}
if(isSafari=navigator.userAgent.indexOf("Safari")>0) {
return "Safari";
}
if(isCamino=navigator.userAgent.indexOf("Camino")>0){
return "Camino";
}
if(isMozilla=navigator.userAgent.indexOf("Gecko/")>0){
return "Gecko";
}
}
if(navigator.userAgent.indexOf("MSIE")>0){
document.getElementById('tx1').attachEvent("onpropertychange",txChange);
}else if(navigator.userAgent.indexOf("Firefox")>0){
document.getElementById('tx1').addEventListener("input",txChange2,false);
}
function txChange(){
alert("testie");
}
function txChange2(){
alert("testfirefox");
}
</script>
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
【Microsoft Edge 편리 기능】URL 바를 카피하면 타이틀을 포함한 Markdown 형식으로 붙여넣기 가능업무로 이용하고 있는 Microsoft 계정으로 관리를 할 수 있는 것이 일인으로 보급되었던 Microsoft Edge에는, URL을 타이틀도 포함한 Markdown 형식으로 copipe 할 수 있는 편리한 기능이 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.