Javascript 数组值不正确
我有一个数组(拼接到大小2),它跟踪用户单击的内容(第一个、最后一个)。第一个和最后一个元素是唯一的 我正在尝试根据用户单击的内容加载内容。奇怪的是,我没有看到更新的数组,除非我做了2个console.log。如果完成1个日志,则不会更新阵列。我猜这与数组执行/操作时间有关 我调试的方法是单击处理程序来记录并单击以查看数组值。有什么建议或提示吗 我以前从未遇到过这个问题。谢谢Javascript 数组值不正确,javascript,jquery,arrays,Javascript,Jquery,Arrays,我有一个数组(拼接到大小2),它跟踪用户单击的内容(第一个、最后一个)。第一个和最后一个元素是唯一的 我正在尝试根据用户单击的内容加载内容。奇怪的是,我没有看到更新的数组,除非我做了2个console.log。如果完成1个日志,则不会更新阵列。我猜这与数组执行/操作时间有关 我调试的方法是单击处理程序来记录并单击以查看数组值。有什么建议或提示吗 我以前从未遇到过这个问题。谢谢 var clicksInfo = []; $('#a, #b, #c').on('click', fu
var clicksInfo = [];
$('#a, #b, #c').on('click', function(e){
// array: add, splice
if(jQuery.inArray($(this).attr('id'), clicksInfo) == -1){
clicksInfo.push($(this).attr('id'));
if(clicksInfo.length == 2){
// might do something
}else if(clicksInfo.length == 3){
clicksInfo.splice(0,1);
}
}else{
clicksInfo.splice(0,1);
clicksInfo.push($(this).attr('id'));
}
if($(this).attr('id') == 'a'){
// do stuff.
}else if($(this).attr('id') == 'b'){
// do stuff.
}else if($(this).attr('id') == 'c'){
// do stuff.
}
});
$(document).on('click', function(){
console.log('clicksInfo', clicksInfo);
// console.log('clicksInfo', clicksInfo);
});
字符串是字符串,数组是数组,即使在console.log中也是如此,因此执行以下操作时:
console.log('clicksInfo', clicksInfo);
那是一个字符串,一个逗号,然后是一个数组
试着做:
console.log('clicksInfo : '+ clicksInfo);
若要显示字符串表示形式,或将数组显示为对象,请不要将其与其他奇怪内容混合使用:
console.log(clicksInfo);
您面临的问题是,发生的事件不能保证按特定顺序执行。尽管在大多数浏览器中,#a,#b,#c的处理程序都会首先执行,但可以先执行任意一个click处理程序 虽然您可以尝试使用setTimeout等待足够长的时间来同步数据,但您的代码很可能会中断 如果您希望在这两种情况下都处理单击,我的建议是删除#a、#b和#c的处理程序。仅使用文档单击处理程序,传入事件声明,然后检查处理程序中单击元素的ID以调用第一个代码。然后保证在运行第二个代码块之前更新数据。大概是这样的:
var clicksInfo = [];
$(document).on('click', function(e){
if (e.target.id === "a" || e.target.id === "b" || e.target.id === "c") {
// array: add, splice
if (jQuery.inArray(e.target.id, clicksInfo) == -1){
clicksInfo.push(e.target.id);
if(clicksInfo.length == 2){
// might do something
} else if(clicksInfo.length == 3){
clicksInfo.splice(0,1);
}
} else {
clicksInfo.splice(0,1);
clicksInfo.push(e.target.id);
}
if(e.target.id === 'a'){
// do stuff.
}else if(e.target.id === 'b'){
// do stuff.
}else if(e.target.id === 'c'){
// do stuff.
}
}
console.log('clicksInfo', clicksInfo);
});
.我们能喝杯饮料吗?看到HTML有很大帮助:)HTML部分并不重要。只有3个可点击的div。这里是jsfiddle链接。仅供参考,警报按预期工作:这是我第一次看到这个,哇。如果更改console.log('clicksInfo',clicksInfo',则确切的脚本可以工作;到console.log(单击sinfo);。。就像Chrome认为第一个参数是一样的,第二个是数组。是的,这很有效。以前从未遇到过日志阵列问题。谢谢您不能在console.log中混用字符串和数组,并期望控制台能够解决这个问题,大多数情况下,您应该将对象单独传递给控制台,并且根本不要将它们与字符串混用,只需使用字符串执行另一个控制台日志,等等。