元素重置

时间:2015-06-09 09:57:07

标签: javascript jquery internet-explorer-8 reset

我有一个js代码,它根据ajax响应的类型重置jsp上元素的值。代码为所有元素运行for循环;获取近800-900个元素的所有元素。 IE 8为无响应的脚本提供恼人的弹出消息。我已经阅读了很多关于它的文章,但到目前为止还没有任何帮助,或者我无法实现解决问题。

以下是导致弹出的代码。

function clearField(ele,eleType)
        {
            if(eleType=="checkbox")
            {
                        ele.prop('checked', false);
            }
            else if(eleType=="text")
            {
                        ele.val("");
                        ele.removeAttr('disabled');
                        ele.removeAttr('readonly');
            }
            else if(eleType=="radio")
            {
                if(ele.is(':checked'))
                { 
                    ele.prop('checked', false);
                }
            }
            else if(eleType=="multiple")
            {
                        if(ele.data('echMultiselect')!==undefined)
                        {
                        ele.multiselect("uncheckAll");
                        ele.multiselect("refresh");
                        }
            }
            else if(eleType=="hidden")
            {
                        ele.val("");
            }
            else
            {
                        ele.val("Select");
                        ele.removeAttr('disabled');
                        ele.removeAttr('readonly');}
        }

上面的函数被调用for循环迭代。 ele被提取如下并传递给函数。

          var ele = $("input[name='"+ elementName+"']"); 

请建议是否可以进行任何改进,或者可以使用任何其他方法来实现相同的目标。

1 个答案:

答案 0 :(得分:0)

无响应的脚本弹出窗口是由长时间运行的功能引起的。这会阻止javascript的单线程事件循环并使页面无响应,直到函数退出。如果异步运行clear,则不会阻止事件循环。例如,您可以使用setImmediate(clearField.bind(null,ele,eleType))替换clearField(ele,eleType)。这是一个快速入侵,可以释放事件循环并阻止弹出窗口显示,但不能解决下面的性能问题。

DOM访问是一项昂贵的操作,如果可能的话,应该避免访问数百个元素。如果您的用例总是将所有字段重置为默认阶段,我建议您使用所有元素的looooong HTML字符串,并调用$(parent).html(htmlString)来设置元素。这样你只需要一个DOM访问,效果是即时的。

http://api.jquery.com/html/