检查parentNode是否未定义

时间:2013-09-04 15:09:21

标签: jquery

我遇到了一个未定义parentNode的TypeError。如何检查parentNode是否未定义?

这是我的方法:

    function updateImages(myRow) { 
        var rowInputs =  j$(myRow).find('input[type="text"]');
        var contact = (j$(rowInputs[0]).val()); 
        var user = (j$(rowInputs[1]).val());
        var account = (j$(rowInputs[2]).val());

        if (contact !== '') {
            j$(rowInputs[0].parentNode).find('img').show();
            j$(rowInputs[1].parentNode).find('img').hide();
            j$(rowInputs[2].parentNode).find('img').hide();
        }    
        else if (user !== '') {
            console.log('user is not blank');
            console.log(j$(rowInputs[1]));
            console.log(j$(rowInputs[1].parentNode));
            j$(rowInputs[0].parentNode).find('img').hide();
            j$(rowInputs[1].parentNode).find('img').show();
            j$(rowInputs[2].parentNode).find('img').hide();
        }
        else if (account !== '') {
            j$(rowInputs[0].parentNode).find('img').hide();
            j$(rowInputs[1].parentNode).find('img').hide();
            j$(rowInputs[2].parentNode).find('img').show();
        }
        if (account !== '' && contact !== '') {
            j$(rowInputs[0].parentNode).find('img').show();
            j$(rowInputs[1].parentNode).find('img').hide();
            j$(rowInputs[2].parentNode).find('img').hide();
        }
    }
</script>

我需要检查rowInputs [1] .parentNode的parentNode是否未定义,以及rowInputs [2] .parentNode的parentNode是否未定义。

感谢您的帮助。 问候。

1 个答案:

答案 0 :(得分:0)

这是一个建议:

function updateImages(myRow) { 
    var rowInputs =  j$(myRow).find('input[type="text"]');
    var contact = rowInputs.eq(0); 
    var user = rowInputs.eq(1);
    var account = rowInputs.eq(2);

    var cont = contact.parent().find('img');
    var usr = user.parent().find('img');
    var aco = account.parent().find('img');

    if (contact.val() !== '') {
        cont.show();
        usr.hide();
        aco.hide();
    }    
    else if (user.val() !== '') {
        console.log('user is not blank');
        console.log(user);
        console.log(user.parent());
        cont.hide();
        usr.show();
        aco.hide();
    }
    else if (acontount.val() !== '') {
        cont.hide();
        usr.hide();
        aco.show();
    }
    /* This is redundant same as first if
    if (acontount.val() !== '' && contact.val() !== '') {
        j$(rowInputs[0]).parent().find('img').show();
        j$(rowInputs[1]).parent().find('img').hide();
        j$(rowInputs[2]).parent().find('img').hide();
    }
    */
}

您的代码假定每行总有3个元素,因此可能会抛出错误。如果您使用.eq(),则始终会获得jQuery对象而不会出现undefined错误。如果你发布你的html,我们可以找到一种更好的方法来优化代码。