Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 数组值不正确_Javascript_Jquery_Arrays - Fatal编程技术网

Javascript 数组值不正确

Javascript 数组值不正确,javascript,jquery,arrays,Javascript,Jquery,Arrays,我有一个数组(拼接到大小2),它跟踪用户单击的内容(第一个、最后一个)。第一个和最后一个元素是唯一的 我正在尝试根据用户单击的内容加载内容。奇怪的是,我没有看到更新的数组,除非我做了2个console.log。如果完成1个日志,则不会更新阵列。我猜这与数组执行/操作时间有关 我调试的方法是单击处理程序来记录并单击以查看数组值。有什么建议或提示吗 我以前从未遇到过这个问题。谢谢 var clicksInfo = []; $('#a, #b, #c').on('click', fu

我有一个数组(拼接到大小2),它跟踪用户单击的内容(第一个、最后一个)。第一个和最后一个元素是唯一的

我正在尝试根据用户单击的内容加载内容。奇怪的是,我没有看到更新的数组,除非我做了2个console.log。如果完成1个日志,则不会更新阵列。我猜这与数组执行/操作时间有关

我调试的方法是单击处理程序来记录并单击以查看数组值。有什么建议或提示吗

我以前从未遇到过这个问题。谢谢

    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中混用字符串和数组,并期望控制台能够解决这个问题,大多数情况下,您应该将对象单独传递给控制台,并且根本不要将它们与字符串混用,只需使用字符串执行另一个控制台日志,等等。