在IE7中获取“停止运行此脚本”消息

时间:2013-11-08 09:15:20

标签: jquery performance

我需要在复选框点击

上执行以下代码
            for (i = 0; i < dropDownCtrl.length; i++) {

                $("#dropDownCtrl option[value='" + dropDownCtrl[i].objName + "']").remove();
           }

然而,由于dropDownCtrl.length值较大,我在IE7中收到“停止运行此脚本”消息。

任何人都可以帮我解决如何将我的代码集成到下面给出的URL中提到的代码中

http://www.picnet.com.au/blogs/Guido/post/2010/03/04/How-to-prevent-Stop-running-this-script-message-in-browsers

请帮忙。

2 个答案:

答案 0 :(得分:3)

第一步:Don't use jQuery

var opts = document.getElementById('dropDownCtrl').options, lookup = {},
    l = dropDownCtrl.length, i;
// first use "lookup" as a quick lookup table - otherwise we'd have O(n*m) !
for( i=0; i<l; i++) lookup[dropDownCtrl[i].objName] = true;
// now we can do this in O(n+m), much better.
l = opts.length;
for( i=0; i<l; i++) {
    if( lookup[opts[i].value]) opts.parentNode.removeChild(opts[i]);
}

钽哒!现在应该更快,更快。

答案 1 :(得分:1)

由于您使用的是jQueryUI Multi Select控件,因此CheckAll会导致此问题。 我已经尝试用 _toggleChecked 事件中的for循环替换.each(),导致超时。更改后的工作正常,没有任何脚本错误。

this.element
    .find('option')
    .each(function() {
     //if(!this.disabled && $.inArray(this.value, values) > -1) {
        self._toggleState('selected', flag).call(this);
      //}
    });