onchange 동작을 발사하도록 선택을 프로그래밍 방식으로 변경하려면 어떻게해야합니까?

StackOverflow https://stackoverflow.com/questions/1224728

  •  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에서 값을 설정할 때 이벤트 처리기의 자동 호출을 "추가하지 않았다고 가정합니다.

다음과 같은 질문과 답변을 살펴볼 수 있습니다. 도움이 될 수 있습니다.

트리거하려는 모든 사람을 위해 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를 할당해보십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top