我在我的应用程序中使用以下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中改进这一点
非常感谢,杰克.
$(':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.