如何使用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
...
});
答案 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
}
});