jquery-easyui组件combobox模糊查询在IE中数据太多导致浏览器崩溃

       由于combobox模糊查询是吧原来的所有下拉的选项首先全部隐藏,然后再根据用户输入的值来判断,如果正确,则显示出来,本人测试1000条数据的时候在火狐里并没有问题,可是在IE8却导致浏览器十分缓慢,经常导致浏览器奔溃。由于在IE中修改display的值让元素显示出来会导致整个dom树重新加载一次,N多次循环之后便导致浏览器直接崩溃,我在下面修改了一下combobox.js模糊查找的机制,改成一开始先全部清空,然后在把符合条件的元素加载进来,下面是修改的代码:

1.添加一个方法

 function _2cc(_2d, _2e, _2f) {
        var _30 = $.data(_2d, "combobox").options;
        var _31 = $(_2d).combo("panel");
        //$.data(_2d, "combobox").data = _2e;
        var _32 = $(_2d).combobox("getValues");
        _31.empty();
        for (var i = 0; i < _2e.length; i++) {
            var v = _2e[i][_30.valueField];
            var s = _2e[i][_30.textField];
            var _33 = $("<div class=\"combobox-item\"></div>").appendTo(_31);
            _33.attr("value", v);
            if (_30.formatter) {
                _33.html(_30.formatter.call(_2d, _2e[i]));
            } else {
                _33.html(s);
            }
            if (_2e[i]["selected"]) {
                (function () {
                    for (var i = 0; i < _32.length; i++) {
                        if (v == _32[i]) {
                            return;
                        }
                    }
                    _32.push(v);
                })();
            }
        }
        if (_30.multiple) {
            _1a(_2d, _32, _2f);
        } else {
            if (_32.length) {
                _1a(_2d, [_32[_32.length - 1]], _2f);
            } else {
                _1a(_2d, [], _2f);
            }
        }
        _30.onLoadSuccess.call(_2d, _2e);
        $(".combobox-item", _31).hover(function () {
            $(this).addClass("combobox-item-hover");
        }, function () {
            $(this).removeClass("combobox-item-hover");
        }).click(function () {
            var _34 = $(this);
            if (_30.multiple) {
                if (_34.hasClass("combobox-item-selected")) {
                    _1b(_2d, _34.attr("value"));
                } else {
                    _d(_2d, _34.attr("value"));
                }
            } else {
                _d(_2d, _34.attr("value"));
                $(_2d).combo("hidePanel");
            }
        });
    };


2.修改_3b方法(模拟查询的方法)

 function _3b(_3c, q) {
        var _3d = $.data(_3c, "combobox").options;
        if (_3d.multiple && !q) {
            _1a(_3c, [], true);
        } else {
            _1a(_3c, [q], true);
        }
        if (_3d.mode == "remote") {
            _35(_3c, null, { q: q }, true);
        } else {
            var _3e = $(_3c).combo("panel");
            //_3e.find("div.combobox-item").hide();
            _3e.find("div.combobox-item").remove();
            var _3f = $.data(_3c, "combobox").data;
            var arry = [];
            for (var i = 0; i < _3f.length; i++) {
                if (_3d.filter.call(_3c, q, _3f[i])) {
                    arry.push(_3f[i]);
                    }
            }
            _2cc(_3c, arry, true);
        }
    };

源码下载:

combobox.js


猜你喜欢

转载自blog.csdn.net/qq243348167/article/details/38077827