如果返回始终为true并使用has()检查每个元素

时间:2014-04-24 03:49:02

标签: javascript jquery html

在输入焦点上,我想检查msg类是否没有错误的类,然后做一些事情。我尝试使用以下代码,但if语句始终返回true。

的jQuery

$('form .field input').on('focus blur', function(e){
    if($(this).parent().find('.msg').parent().not(':has(.err)')) {
        $(this).parent().find('.msg').parent().stop()[e.type === 'focus' ? 'slideDown' : 'slideUp']();
    }
})

然后我还要检查每个带有err类的msg类。如果只有1,我想在父母中选择输入。

这是我的尝试,但没有用。

if($('.msg').parent('.field').has('.err').length === 1) {
    $(this).parents().find('input').select();
}

HTML

<div class="field">
    <input type="text">
    <div>
        <div class="msg">Msg.</div>
    </div>
</div>
<div class="field">
    <input type="text">
    <div>
        <div class="msg err">Err msg.</div>
    </div>
</div>

2 个答案:

答案 0 :(得分:2)

.not()不会返回类似.is()的布尔值。它与.filter()相反。返回的集合总是被评估为真实。

if ($(this).parent().find('.msg').parent().not(':has(.err)')) {

应该是:

if (!$(this).parent().find('.msg').parent().is(':has(.err)')) {
//  ^ not                                   ^^ returns boolean

答案 1 :(得分:0)

使用hasClass

$('form .field input').on('focus blur', function(e){
    if(!$(this).parent().find('.msg').parent().hasClass('err')) {
        $(this).parent().find('.msg').parent().stop()[e.type === 'focus' ? 'slideDown' : 'slideUp']();
    }
})

if($('.msg').parent('.field').hasClass('err')) {
    $(this).parents().find('input').select();
}