2013-08-20 3 views
5

개요 :onchange를 이벤트가 발생하지 않습니다

내가 한 번 입력 상자에 텍스트 상자를 변환하는 jQuery 플러그인을 쓰고 있어요. 이것은 사용자가 HH : MM 형식으로 시간을 입력 할 수 있음을 의미합니다. 이 프로세스의 일부는 콜론 (:)을 올바른 위치에 삽입하는 것입니다. keyup에서 사용자가 2 개의 숫자를 입력했는지 확인하고 입력 된 값에 콜론을 추가하십시오.

문제 :

이 방법은 누군가가 텍스트 상자에 플러그인을 적용하는 경우를 제외하고 잘 작동뿐만 아니라 코드는 텍스트 상자의 값을 업데이트 할 때 발생하지 않습니다 핸들러 onchange를 handler.This onchange를 사용자 정의를 가지고 싶어 프로그래밍도 텍스트 상자가 포커스를 잃을 때 시작됩니다.

나의 이해 : 내가 틀렸다면 내가 여기 추측하고있어

, 그래서 저를 수정하시기 바랍니다.

  • 아마 텍스트 상자 내부 "_value"가 편집을 시작하기 전에 텍스트 상자에 값을 보유 필드 (공개 키의 값 속성에서 차별화하는 데 강조)가 있습니다. 포커스가 texbox를 떠날 때 JS 엔진은 텍스트 상자 의 현재 값이 텍스트 상자의 "_value"과 일치하는지 확인합니다. 다른 경우 onchange 이벤트가 발생합니다.
  • 아마도 일반적인 기본 키 입력을 사용하여 값을 변경하면 "_value" 값만 변경되므로 onchange이 실행됩니다. 하지만 아마도 JS를 통해 변경된 값은 값과 "_value" 및 모두을 수정하므로 onchange 이벤트가 실행되지 않습니까?

해결안 :이 값에 무관으로

흐림 이벤트가 발생. 따라서 명시 적으로 blur 이벤트에서 변경 이벤트를 발생시킬 수 있습니다. 그러나 해킹이며 흐림 및 변경의 의미를 없애기 때문에이 작업을 수행하고 싶지 않습니다.

관련 링크 : 나는 같은 질문을 SO에 대한 몇 가지 링크를 찾았지만 아무 대답 (IMHO)이 우아한 또는 올바른 솔루션을 제공하지

.

약식 CODE :

여기에 내가 본 사람 중 일부입니다
$(document).ready(function() { 
    $("input").keyup(function() { 
     this.value = '*' + this.value; 
     // this changes the value, but does not fire the onchange event 
     // and it also does not fire it when the textbox loses focus. 
     // blur fires though. 
    }); 
    $("input").change(function() { 
     alert('in change'); 
    }); 

    $("input").blur(function() { 
     alert('in blur'); 
    }); 
}); 

뿐인 : 테스트 완료

http://jsfiddle.net/sajjansarkar/vHgst/4/

브라우저 : IE8,10 및 크롬. 파이어 폭스에서 작품 (!) 당신은 jquery.trigger와 프로그램 이벤트를 트리거 할 수

+0

당신이'ele.value을 설정하면 변경 이벤트가 발생하지 않습니다 '는 일반적인 행동입니다. 참고로, 둘 다, 입력이 불투명 해지면 파이어 폭스에서 '변경'이벤트가 발생합니다. –

+0

@FelixKling 일반적인 행동 인 경우 어떻게하면 onchange 동작을 유지할 수 있습니까? FF에서 작동한다는 재미있는 관찰은 질문을 편집 할 것입니다 –

답변

1

(+1 펠릭스 클링) : http://jsfiddle.net/vHgst/5/

$(this).trigger('change'); 
+0

그래,하지만 언제 이것을 바꿔서 정확한 변경 이벤트를 모방 할 수 있을까? 귀하의 예제는 모든 키 입력에 대해 onchange를 호출합니다. –

관련 문제