在两个不同的点击事件之间传递数组值

时间:2018-12-12 17:47:00

标签: javascript jquery arrays

如何使用jQuery将数组中的值从一个事件单击传递到另一个事件?

这是我要执行的一个示例:如果未选中输入复选框,则第一次单击事件会在数组中添加或删除值。在第二次单击中,我要遍历此数组的所有元素。

var array=[];
 $( "input" ).on( "click", function() {
  var $input=$(this)
  if($input.is(":checked")){
  array.push($(this).val()); //append check box value to array if is selected
  }
else{
   array.pop($(this).val()); // remove check box value to array if is not selected
  }

 })
$('#cmd').click(function() {
     for (i of array) {
        console.log(array[i]); // loop trough all elements in array
    ...
});

1 个答案:

答案 0 :(得分:1)

您的代码看起来不错,除了两点。首先是for (i of array)。使用of会将实际值返回为i,但是您正在将值用作array[i]中的索引。

如果要使用索引,请改用for (let i = 0; i < array.length; i++)

您也可以使用Array.prototype.forEach(),但不能脱离它的循环https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach

第二件事是.pop()不支持参数。使用下面的代码代替.pop()

var index = array.indexOf($input.val());
if (index > -1) {
  array.splice(index, 1);
}

如果事件处理程序位于不同的范围内,并且#cmd处理程序看不到array。您可能会使用这种糟糕的解决方案在范围之间共享数组:)

$("input").on( "click", function() {
  var array = $("#cmd").data("arr") || [];

  var $input= $(this);
  var value = $input.val();
  if($input.is(":checked")){
    array.push(value); /
  } else {
    var index = array.indexOf(value);
    if (index > -1) {
      array.splice(index, 1);
    }
  }

  $("#cmd").data("arr", array);
});

$('#cmd').click(function() {
     var array = $(this).data("arr") || [];
     for (let value of array) {
        console.log(value); // loop trough all elements in array
     }
});