1

我需要在复选框单击时执行以下代码

            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

请帮忙。

4

2 回答 2

3

第一步:不要使用 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]);
}

达达!现在应该快得多了。

于 2013-11-08T09:19:45.787 回答
1

由于您使用的是 jQueryUI 多选控件并且 CheckAll 导致了问题。我尝试用导致超时的_toggleChecked事件中的 for 循环替换 .each() 。更改后它的工作正常,没有任何脚本错误。

this.element
    .find('option')
    .each(function() {
     //if(!this.disabled && $.inArray(this.value, values) > -1) {
        self._toggleState('selected', flag).call(this);
      //}
    });
于 2013-11-14T01:12:36.840 回答