Cannot read 属性 'length' of undefined 很少发生
Cannot read property 'length' of undefined rarely happening
我一直在创建一个工具,需要创建一系列下拉菜单到 select 一个 profile/view id(来自 google 分析),以填充下一个菜单更改前一个(select为正确的帐户设置正确的属性,然后为正确的属性设置正确的配置文件)。
为此,我制作了一个小的 jquery/javascript for 循环系统,我认为它实际上相当混乱,但我不确定如何改进它(虽然不是问题的一部分,但这可能是一个我遇到问题的原因,虽然我不确定)。
此脚本适用于我测试过的所有浏览器,包括我非常满意的移动设备。
但是,当该工具启动时,有两个人(大约一百个人)回来说 profile/view 尚未 selected。这很好奇,因为我无法重现此错误。
我已经与其中一个人联系并尝试调试(尽管通过一系列的会议等过程很慢),但找不到解决方法,(尽管我认为我设法隔离了问题,代码示例后会指出)。
所以我的问题是这样的。是什么导致了这么长的未定义错误,以及为什么只有 1-2 个人在大量错误中发生(似乎在 jquery.min.js:2 使用 jquery 版本 1.11.1 ?)。错误似乎是在 属性 更改时发生的,这很奇怪,因为配置文件填写正确。另外我问客户是否可以使用不同的浏览器和帐户,但同样的错误不断发生。
这是创建下拉菜单的代码:
function fillDropdownMenus(){
var accounts = <?php echo json_encode($accountsArray); ?>;
var propertiesSelectHtml = '<div class="col-xs-12 col-md-4 properties"><select class="col-xs-12" id="properties"><option selected="selected">PROPERTY NAMES</option></select></div>';
var profilesSelectHtml = '<div class="col-xs-12 col-md-4 profiles"><select class="col-xs-12" id="profiles"><option selected="selected">VIEW NAMES</option></select></div>';
accounts.forEach(function(account){
var accountIterator = 0;
account.account['id'].forEach(function(accountId){
$('#accounts').append('<option value="'+accountId+'">'+account.account['name'][accountIterator]+'</option>');
accountIterator++;
});
});
$('.accounts').on('change','#accounts', function(event){
var currentAccount = $('#accounts').val();
$('.properties').remove();
$('.profiles').remove();
$('.accounts').after(propertiesSelectHtml);
accounts.forEach(function(account){
$.each(account.account, function(accountkey, accountvalue){
if(accountvalue == currentAccount){
var propertyIterator = 0;
account.account['property']['id'].forEach(function(propertyId){
$('#properties').append('<option value="'+propertyId+'">'+account.account['property']['name'][propertyIterator]+'</option>');
propertyIterator++;
});
}
});
});
$('.properties').on('change','#properties', function(ev){
var currentProperty = $('#properties').val();
$('.profiles').remove();
$('.properties').after(profilesSelectHtml);
accounts.forEach(function(account){
$.each(account.account['property'], function(propertykey, propertyvalues){
if($.type(propertyvalues) == 'object' || $.type(propertyvalues) == 'array'){
for(var k in propertyvalues){
var propertyvalue = propertyvalues[k];
if(propertyvalue == currentProperty){
var profileIterator = 0;
account.account['property']['profile']['id'].forEach(function(profileId){
$('#profiles').append('<option value="'+profileId+'">'+account.account['property']['profile']['name'][profileIterator]+'</option>');
profileIterator++;
});
}
}
} else {
if(propertyvalue == currentProperty){
var profileIterator = 0;
account.account['property']['profile']['id'].forEach(function(profileId){
$('#profiles').append('<option value="'+profileId+'">'+account.account['property']['profile']['name'][profileIterator]+'</option>');
profileIterator++;
});
}
}
});
});
$('#profiles').on('change', function(e){
$('#view_id').removeAttr('value');
var currentProfile = $('#profiles').val();
$('#view_id').val(currentProfile);
});
});
});
}
fillDropdownMenus();
和 object 结构:
Object -> account (object) -> id (array)
-> name (array)
-> property (object) -> id (array)
-> name (array)
-> profile (object) -> id (array)
-> name (array)
感谢您对我的这个问题的意见,因为我已经用头撞墙好几天了,试图解决这个问题!
编辑:http://codepen.io/zephyr/pen/VYQPKQ 这是列表的代码笔。
这似乎是我的 javascript 非常不一致的一个错误(有这么多不同的 for 循环没有帮助)。在我将它们全部更改为正常的 .each jquery 循环后,它似乎解决了问题,并使整个菜单集工作得更好,因为也存在一些逻辑错误(我没有通过过滤配置文件属性,它只是在选择 属性 时显示该帐户的所有内容。
我一直在创建一个工具,需要创建一系列下拉菜单到 select 一个 profile/view id(来自 google 分析),以填充下一个菜单更改前一个(select为正确的帐户设置正确的属性,然后为正确的属性设置正确的配置文件)。
为此,我制作了一个小的 jquery/javascript for 循环系统,我认为它实际上相当混乱,但我不确定如何改进它(虽然不是问题的一部分,但这可能是一个我遇到问题的原因,虽然我不确定)。
此脚本适用于我测试过的所有浏览器,包括我非常满意的移动设备。
但是,当该工具启动时,有两个人(大约一百个人)回来说 profile/view 尚未 selected。这很好奇,因为我无法重现此错误。
我已经与其中一个人联系并尝试调试(尽管通过一系列的会议等过程很慢),但找不到解决方法,(尽管我认为我设法隔离了问题,代码示例后会指出)。
所以我的问题是这样的。是什么导致了这么长的未定义错误,以及为什么只有 1-2 个人在大量错误中发生(似乎在 jquery.min.js:2 使用 jquery 版本 1.11.1 ?)。错误似乎是在 属性 更改时发生的,这很奇怪,因为配置文件填写正确。另外我问客户是否可以使用不同的浏览器和帐户,但同样的错误不断发生。
这是创建下拉菜单的代码:
function fillDropdownMenus(){
var accounts = <?php echo json_encode($accountsArray); ?>;
var propertiesSelectHtml = '<div class="col-xs-12 col-md-4 properties"><select class="col-xs-12" id="properties"><option selected="selected">PROPERTY NAMES</option></select></div>';
var profilesSelectHtml = '<div class="col-xs-12 col-md-4 profiles"><select class="col-xs-12" id="profiles"><option selected="selected">VIEW NAMES</option></select></div>';
accounts.forEach(function(account){
var accountIterator = 0;
account.account['id'].forEach(function(accountId){
$('#accounts').append('<option value="'+accountId+'">'+account.account['name'][accountIterator]+'</option>');
accountIterator++;
});
});
$('.accounts').on('change','#accounts', function(event){
var currentAccount = $('#accounts').val();
$('.properties').remove();
$('.profiles').remove();
$('.accounts').after(propertiesSelectHtml);
accounts.forEach(function(account){
$.each(account.account, function(accountkey, accountvalue){
if(accountvalue == currentAccount){
var propertyIterator = 0;
account.account['property']['id'].forEach(function(propertyId){
$('#properties').append('<option value="'+propertyId+'">'+account.account['property']['name'][propertyIterator]+'</option>');
propertyIterator++;
});
}
});
});
$('.properties').on('change','#properties', function(ev){
var currentProperty = $('#properties').val();
$('.profiles').remove();
$('.properties').after(profilesSelectHtml);
accounts.forEach(function(account){
$.each(account.account['property'], function(propertykey, propertyvalues){
if($.type(propertyvalues) == 'object' || $.type(propertyvalues) == 'array'){
for(var k in propertyvalues){
var propertyvalue = propertyvalues[k];
if(propertyvalue == currentProperty){
var profileIterator = 0;
account.account['property']['profile']['id'].forEach(function(profileId){
$('#profiles').append('<option value="'+profileId+'">'+account.account['property']['profile']['name'][profileIterator]+'</option>');
profileIterator++;
});
}
}
} else {
if(propertyvalue == currentProperty){
var profileIterator = 0;
account.account['property']['profile']['id'].forEach(function(profileId){
$('#profiles').append('<option value="'+profileId+'">'+account.account['property']['profile']['name'][profileIterator]+'</option>');
profileIterator++;
});
}
}
});
});
$('#profiles').on('change', function(e){
$('#view_id').removeAttr('value');
var currentProfile = $('#profiles').val();
$('#view_id').val(currentProfile);
});
});
});
}
fillDropdownMenus();
和 object 结构:
Object -> account (object) -> id (array)
-> name (array)
-> property (object) -> id (array)
-> name (array)
-> profile (object) -> id (array)
-> name (array)
感谢您对我的这个问题的意见,因为我已经用头撞墙好几天了,试图解决这个问题!
编辑:http://codepen.io/zephyr/pen/VYQPKQ 这是列表的代码笔。
这似乎是我的 javascript 非常不一致的一个错误(有这么多不同的 for 循环没有帮助)。在我将它们全部更改为正常的 .each jquery 循环后,它似乎解决了问题,并使整个菜单集工作得更好,因为也存在一些逻辑错误(我没有通过过滤配置文件属性,它只是在选择 属性 时显示该帐户的所有内容。