dojo 작은 예 (29) Filtering Select IE8 에서 입력 법 (IME) 에 응답 하지 않 으 면 suggest 를 꺼 내지 않 습 니 다.

IE8 에서 FilteringSelect 는 한 자 를 입력 하면 Ajax 조 회 를 실행 하고 드 롭 다운 목록 을 표시 할 수 없습니다.시험 을 통 해 영어, 자 모 를 입력 하면 촉발 할 수 있 고 한 자 를 입력 하면 촉발 할 수 없 지만 한 자 를 입력 한 후에 빈 칸 을 입력 하면 Ajax 조 회 를 촉발 할 수 있다.한 자 를 입력 한 후 Enter 를 누 르 면 Ajax 조 회 를 촉발 할 수 없습니다.
원인 찾기, ie8 에서 한자 입력 후 입력 상자 의processInput 이 벤트 는 실행 할 수 없어 입력 내용 을 가 져 올 수 없습니다.
그러나 IE8 은 한 자 를 포함 하여 onproperty change 를 지원 하여 입력 한 모든 내용 을 얻 을 수 있 습 니 다.Filtering Select 의 부족 함 을 이 특성 으로 보완 할 수 있 습 니 다.Filtering Select 를 계승 하여 확장 하고 사용자 정의 widget 을 만들어 IE8 호 환 을 실현 하 는 것 입 니 다.
define([
	"dojo/_base/declare",
	"dojo/sniff",
	"dijit/form/FilteringSelect"
], function(declare, has, FilteringSelect) {
	
	return declare(FilteringSelect, {
		
		fskey: undefined,
		
		postCreate: function() {
			var _this  = this;
			if(has("ie") === 8){ //   IE8      
				this.focusNode.onpropertychange = function(){ // focusNode input ,        
					if(this.value){
						//console.log("key",_this.fskey);
						if(_this.fskey == '229'){ // support IME input
							_this._startSearch(this.value); //       ,  Ajax     suggest  
							_this.fskey = undefined;
							//window.event.cancelBubble = false;
						}
					}
				}
			}
            this.inherited(arguments);
        },
        _onKey: function(evt){ // Override          
        	this.fskey = evt.charCode || evt.keyCode;
		//console.log("_onKey keycode",this.fskey,"type",evt.type);
        	this.inherited(arguments);
        }
	});
});

2015.3.18 보충:
위의 코드 는 IE9 이하 의 모든 IE 버 전 을 호 환 할 수 있 습 니 다. has ("ie") = = 8 을 has ("ie") < 9 로 변경 할 수 있 습 니 다.

좋은 웹페이지 즐겨찾기