在IE6中,Jquery工作得非常慢

jac*_*ack 2 jquery

我在我的应用程序中使用以下jquery代码..

我们的想法是当用户来到表单并单击屏幕上的任何按钮时单击按钮.

    <script> 
        $(document).ready(function() {
            $('form').focusin(function() {
                $(this).addClass('focused');
            });
            $(':not(form)').bind('click', function(e) {
                if (!$(e.target).parents('form.focused').length) {
                    form.getElementById("customerdetails").click();
                }
            });
        });
    </script> 
Run Code Online (Sandbox Code Playgroud)

这个脚本在forefox中运行正常,但这在IE6中非常慢......我可能知道这个的原因吗?它在IE8中运行得更快......任何想法?

请建议在IE6中改进这一点

非常感谢,杰克.

bob*_*nce 7

$(':not(form)').bind()
Run Code Online (Sandbox Code Playgroud)

哎哟! 您刚刚选择了页面上除表单之外的每个元素,并click分别在每个元素上添加了一个处理程序.这可能是元素的整个负载(甚至之类的东西<head>,并<script>为这click是没有意义的).

到目前为止,这确实会很慢:你只是在其他浏览器中看不到它,因为它们的JS引擎通常比IE6更快.

在父元素上使用委托来捕获它下面的所有点击,检查每次单击时的选择器条件,而不是选择所有元素并更改它们:

$(document).delegate('*', 'click', function(e) {
    if (!$(e.target).is('form.focused *'))
        $('#customerdetails').focus();
});
Run Code Online (Sandbox Code Playgroud)

[编辑:移动选择器测试; 虽然委托:not(form.focused *)在jQuery中工作,但它有点顽皮,因为它不是标准的CSS3选择器.CSS3只允许使用'简单选择器' :not.