jquery undefined错误在一个元素上但不在另一个元素上

时间:2013-06-19 00:27:44

标签: jquery

我有一个函数可以获取所有已选中和未选中复选框的ID,然后根据是否选中隐藏或显示该元素。我的问题是我得到了:

TypeError:upperPos [this]未定义 upperPos [此] .hide();

但我没有在upperPos上发生此错误[this] .show(); (并且元素按原样显示)

jquery的:

$('body').on('change', '.optionForm', function() {
    var formId      = $(this).attr('id'),
        checked     = new Array();
        unchecked   = new Array();
    $('#' + formId + ' input:checked').each(function() {
        checked.push($(this).attr('id'));
    });
    $('#' + formId + ' input:not(:checked)').each(function() {
        unchecked.push($(this).attr('id'));
    });
    console.log(checked);
    $.each(checked, function() {
        upperPos[this].show();/*This does not have an error*/
    });
    console.log(unchecked);
    $.each(unchecked, function() {
        upperPos[this].hide();/*This is error*/
    });
});

两个阵列都正确填充。

upperPos []包含一系列raphael对象。复选框的id对应于raphael对象,该函数应该相应地隐藏/显示它们。

我很感激为什么我得到这个错误的任何帮助。如果您需要任何其他信息,请告诉我们。

谢谢, 亚当

的jsfiddle: http://jsfiddle.net/adam123/Jw9h5/60/

由于某些原因,小提琴有效,但我的代码没有。

2 个答案:

答案 0 :(得分:1)

这很简单意味着upperPos数组中不存在该对象。

所以upperPos[this]未定义数组中的特定项。并且您不应该在此使用this,因为已选中未选中数组是一个字符串数组。

试试这个

$.each(checked, function(i, val) {
   upperPos[val] && upperPos[val].show();
});
console.log(unchecked);

$.each(unchecked, function(i, val) {
   upperPos[val] && upperPos[val].hide();
});

答案 1 :(得分:0)

可能建议你改成这个?除非您需要其他内容的数组,请告诉我并编辑:

$('body').on('change', '.optionForm', function() {
    var formId      = $(this).attr('id'),

    $('#' + formId + ' input:checked').each(function() {        
        $(this).show();
    });
    $('#' + formId + ' input:not(:checked)').each(function() {
            $(this).hide();
    });

});