onchange 동작을 발사하도록 선택을 프로그래밍 방식으로 변경하려면 어떻게해야합니까?
-
22-07-2019 - |
문제
이것은 작동하지 않는 것 같습니다.
<select id="mySel" onchange="alert('foo')">
<option value="a">a</option>
<option value="b">b</option>
</select>
<script>
dojo.byId('mySel').value = 'b'; // select changes, but nothing is alerted
</script>
(저는 Dojo를 사용하고 있지만 실제로는 중요하지 않습니다.)
해결책
'Onchange'이름은 변화가 있다는 것을 이해하지 않는 한 약간 오도됩니다. 이벤트 그리고 값이 변경되는 것도 마찬가지입니다. 변경 사항은 사용자가 브라우저의 값을 변경할 때 발생합니다. 나는 당신이 전화를 통해 수동으로 이벤트를 해고 할 수 있다고 생각합니다. dojo.byId('mySel').onchange()
그래도 프로그래밍 방식으로 값을 변경 한 후에. (실제로 호출하는 함수를 정의해야 할 수도 있습니다. alert
, 그렇지만. 나는 이것을 직접하지 않았다.)
다른 팁
이것은 값이 변경되지만 OnChange 이벤트를 발사하지는 않습니다. JavaScript로 요소를 수정할 때마다 이벤트가 발사되지 않습니다 (재귀 문제*에 들어가는 것을 막을 수 있습니다).
그런 이벤트 핸들러를 설정 한 경우.
function myHandler(){
//do whatever stuff here
changeColor( dojo.byId('mySel') );
}
그런 다음 값을 프로그래밍 방식으로 설정 한 후 별도로 호출 할 수 있습니다.
참고 (*) : 저는 Dojo 전문가가 아닙니다 ... 따라서 JavaScript에서 값을 설정할 때 이벤트 처리기의 자동 호출을 "추가하지 않았다고 가정합니다.
다음과 같은 질문과 답변을 살펴볼 수 있습니다. 도움이 될 수 있습니다.
- HTML Select Box에서 프로그래밍 방식 변경을 감지하십시오.
- 입력에서 OnChange 이벤트를 프로그래밍 방식으로 강제하려면 어떻게해야합니까? (입력에 중점을두고 선택하지는 않지만 여전히 유용 할 수 있습니다)
트리거하려는 모든 사람을 위해 change
JavaScript를 사용한 이벤트.
var evObj = document.createEvent("HTMLEvents");
evObj.initEvent("change", true, true);
var elem = document.getElementById('some-id');
elem.dispatchEvent(evObj);
이벤트 'OnPropertyChange'이벤트에 액세스 할 수 있습니다. 여기에는 어떤 속성이 변경되었는지 확인하기 위해 이벤트 인수 내에 속성이 포함되어 있습니다.
'selectedIndex'및 'value'변경 사항을 모두 감지합니다. 간단히 케이스 테스트 'PropertyName'
<select id="mySel" onpropertychange="dothis(event);">
<option value="a">a</option>
<option value="b">b</option>
</select>
function dothis(event)
{
if (event.propertyName == "selectedIndex")
alert('selection changed');
}
내 머리 꼭대기에서 ...
대신 선택된 index를 할당해보십시오.