dojo小例子(29)FilteringSelect在IE8下对输入法(IME)无响应不弹出suggest

IE8下,FilteringSelect输入汉字不能触发Ajax查询并显示下拉列表。经试验,输入英文、字母能够触发,输入汉字不能触发,但汉字随后输入空格能够触发Ajax查询。输入汉字随后按回车不能触发Ajax查询。

查找原因,是由于在ie8下,汉字输入后,输入框的_processInput事件无法触发,从而不能获取输入内容。

但IE8可以支持onpropertychange从而获取输入的任何内容,包括汉字。可以利用这个特性弥补FilteringSelect的不足。我的做法是继承FilteringSelect并对其进行扩展,创建一个自定义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



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值