2011-04-08 3 views
3

다음 코드를 사용하여 주어진 SELECT 요소의 변경 사항을 확인합니다.코드에서 SELECT 컨트롤의 값을 변경하면 onChange 이벤트가 트리거되어야합니까?

someSelectElement.change(function() { alert('change made'); }); 

그리고 UI를 통해 선택한 항목의 값을 변경할 때 peachy로 작동합니다.

그러나 스크립트를 통해 값을 변경하면 이벤트가 트리거되지 않는 것처럼 보입니다. 예를 들어 디버깅 콘솔 에서 실행 된 다음 코드는 선택한 항목을 변경하지만 은 이벤트을 실행하지 않습니다.

$('#someSelectElement').val('NewValue') 

나는 다른 코드에 의해 제어 변경 사항을 감지 할 필요 이상한 것 알고, 내 코드 있었다면 난 그냥 수동으로 이벤트를 트리거하고 하루에 전화 것입니다. 문제는 사용자 관여 또는 내 플러그인 사용자가 실행중인 일부 클라이언트 측 스크립트를 통해 수행할지 여부에 따라 감시되는 컨트롤의 값이 변경 될 때 무언가를해야하는 jQuery 플러그인을 작성하는 것입니다.

이 상황에서 이벤트를 트리거하지 않는 동작을 의도적으로 가정합니다. 그렇지 않다면, 내가 무슨 말을하고 있는지 나에게 알려주십시오. 그렇다면 사용자 또는 코드가 시작되었는지 여부에 관계없이 SELECT 요소의 값에 대한 변경 사항을 볼 수있는 임시 해결책이 있습니까?

+0

하자에 나에게 아래의 나의 광란을 사용하게되고 실제 시나리오에서 실제로 작동했는지 여부를 알 수 있습니다. 나는 당신의 결과에 관심이있을 것입니다 :) –

답변

4

코드 값에 의한 요소 값 변경은 기본 이벤트를 트리거하지 않습니다. jQuery ".trigger()"메소드를 통해 언제든지 직접 트리거 할 수 있습니다.

Mozilla 브라우저는 오래 동안 "감시"기능을 가지고 있지만 다른 플랫폼에서는 지원하지 않습니다.

+0

설명 주셔서 감사합니다, 그것은 도움이됩니다. 그러나 컨트롤의 가치를 변경하는 코드는 내 코드를 라이브러리로 사용하는 제 3 자의 코드라고 언급했습니다. 그래서 나는 미래에 다른 누군가가 작성한 코드에 트리거를 삽입 할 수 없습니다. 부분 도움을 위해 +1. – JohnFx

+0

이 경우 고전적인 해킹은 인터벌 타이머를 시작하고 거기에서 당신의 요소를 주시하는 것입니다. 일종의 총소리가 들리지만, 100 밀리 초마다 엘리먼트 값을 검사하는 것이라면 브라우저를 망가 뜨리지 않을 것입니다. 자,이 필드들 중 73 개가 약간 문제가 될 수 있지만, 1 ~ 2 개라면 사용자에게는 눈에 띄지 않습니다. – Pointy

3

오케이 - 그래서 은 인터벌 타이머 솔루션보다 더 나은 해결책이 있습니다.

또한 이것은 훨씬 큰 해킹은 참고 다음은 단순히 개념의 증거이며, 결코 생산 준비 : 내가 뭘 해요, 기본적으로

$(document).ready(function(){ 
    function change(){ 
     $('#test option[value=3]').attr('selected', 'selected'); 
    } 

    // run it before changing it 
    alert('first go'); 
    change(); 

    var tmp = String(change).replace(/function change\(\){/, ''); 
    tmp = tmp.replace('}', ''); 
    tmp += 'alert(\'it changed\');'; 

    change = function() { eval(tmp); }; 

    // try it again - should get the second alert this time 
    alert('second go (post mod)'); 
    change(); 
}); 

See the sample here.

하고 있습니다 :

  1. 문자열로 기능을 변환
  2. 교체 경계 기능은
  3. 내가

가 작동하는 것 같다 원래의 기능에 수정 된 기능을 다시 할당 주입 원하는 기능 추가 구축,하지만 수도없는 현실 세계 :

관련 문제