我有一个函数可以获取所有已选中和未选中复选框的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/
由于某些原因,小提琴有效,但我的代码没有。
答案 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();
});
});