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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。