Javascript OnClick-on元素用JS填充数组

Javascript OnClick-on元素用JS填充数组,javascript,jquery,arrays,Javascript,Jquery,Arrays,所以,我有不同的元素,比如: <div data-action="change_status" data-date="2019-03-02" data-roomid="45" data-status="Close">Change status</div> <div data-action="change_status" data-date="2019-03-02" data-roomid="46" data-status="Open">Change statu

所以,我有不同的元素,比如:

<div data-action="change_status" data-date="2019-03-02" data-roomid="45" data-status="Close">Change status</div>
<div data-action="change_status" data-date="2019-03-02" data-roomid="46" data-status="Open">Change status</div>
<div data-action="change_status" data-date="2019-03-03" data-roomid="46" data-status="Close">Change status</div>
<div data-action="change_status" data-date="2019-03-03" data-roomid="47" data-status="Open">Change status</div>
我的问题是,如果用户在同一个元素上单击两次,就会在该数组中创建两行

如何检查数组中是否已存在id,以及如何使用上次单击的值更新它

最后,我想用Ajax将这个数组传递到一个PHP页面


非常感谢。

您可以尝试下一步:

if (arr.filter(e => e.current_roomid === $(this).data('roomid')).length === 0) {
  arr.push({
     current_status: $(this).data('status'),
     current_date: $(this).data('date'),
     current_roomid: $(this).data('roomid')
   });
}

我们可以使用您的
roomid
Array.prototype.find来轻松实现这一点

在数组上循环并检查是否找到任何值。如果是,则返回数组项

如果单击“更改状态”,第一次会显示
未定义
,第二次和之后会显示数组条目

var arr=[];
$('[data action=“change_status”]')。单击(函数(事件){
$(this).data('status','newValue');
常量元素=arr.find((元素)=>{
return element.current_roomid==$(this.data('roomid'))
});
if(isInArray==未定义)
{
arr.push({
当前状态:$(this).data('status'),
当前日期:$(this).data('date'),
当前\u roomid:$(this).data('roomid')
});
}
其他的
{
//更新
arElement[“当前状态”]=$(this.data('status');
欠款项[“当前日期”]=$(此).data('date');
arElement[“current_roomid”]=$(this.data('roomid');
}
});

改变状态
改变状态
改变状态

更改状态
这更简单。提交时收集数据

$('[data action=“change_status”]')。单击(“click”,函数(事件){
$(this).data('status','newValue');
$(this.text('newValue');
$(this.toggleClass(“newValue”)
});
$(“#发送”)。在(“单击”,函数(){
让变化=[];
$(“[数据状态]”)。每个(函数(){
如果($(this).data(“status”)==“newValue”)发生更改,则单击({
“id”:$(this).data(“roomid”),
“日期”:$(此).数据(“日期”)
})
})
console.log(更改)
});
.newValue{
背景颜色:绿色
}

改变状态
改变状态
改变状态
改变状态

Send
您是否尝试过使用
inaray
?您可以在单击后禁用每个参数。您只需在数组中要使用的元素上放置一个类,就可以避免问题,但实际上只能在将要使用的点创建数组-在发送AJAX请求的情况下。
if (arr.filter(e => e.current_roomid === $(this).data('roomid')).length === 0) {
  arr.push({
     current_status: $(this).data('status'),
     current_date: $(this).data('date'),
     current_roomid: $(this).data('roomid')
   });
}