有没有更好的方法来进行jQuery选择:
$("p.DynFieldWrapper :input:not(:text):not(textarea)").focus(HideDynamicFormError).click(HideDynamicFormError);
$("p.DynFieldWrapper :text,p.DynFieldWrapper textarea").blur(HideDynamicFormError);
我将我的函数HideDynamicFormError绑定到textboxes和textareas的blur事件以及其他表单输入元素的焦点和单击事件。
这是有效的,但我仍然在jQuery中掌握一些东西,并且想知道是否有更好的方法来做到这一点?
答案 0 :(得分:1)
第一个可以更简单一点:
$("p.DynFieldWrapper :input:not(:text,textarea)")
除此之外,你做得很好。
答案 1 :(得分:1)
我很想这样做:
$("p.DynFieldWrapper :input").each(function() {
if ($(this).is(":text") || $(this).is("textarea")) {
$(this).blur(HideDynamicFormError);
} else {
$(this).focus(HideDynamicFormError).click(HideDynamicFormError);
}
});
我不知道(性能方面)与你正在做的事情相比如何。它可能会更好。情况可能更糟。不过值得测试。
你正在做的事情没有错。我只是不确定所有p找到的速度加上寻找表单元素的所有子树遍历都将是。它可能取决于文档的大小和相关的子树。
答案 2 :(得分:0)
您也可以使用bind()将事件处理程序绑定到多个事件。使用p.DynFieldWrapper
作为上下文也可能更快,但您需要对此进行性能测试。
$("input:not(:text,:textarea)", "p.DynFieldWrapper")
.bind("focus click", HideDynamicFormError);
答案 3 :(得分:0)
合并上述所有答案+投入使用find的想法,这是怎么回事?
$('p.DynFieldWrapper :input')
.find(':not(:text, textarea)')
.bind('focus click', HideDynamicFormError)
.end()
.find(':text, textarea')
.blur(HideDynamicFormError);
修改强>
另一个想法,只是为了好玩! (虽然我自己也不喜欢)
$('p.DynFieldWrapper :input')
.bind('focus click blur',
function(ev)
{
if($(this).is(':text, textarea'))
{
if(ev.type == 'blur')
HideDynamicFormError(ev);
}
else
{
if(ev.type != 'blur')
HideDynamicFormError(ev);
}
}
);