【发布时间】:2018-01-16 00:23:53
【问题描述】:
我有一个所有插座的表格列表,我有一个实现 CSS 按钮来激活或停用插座,
@foreach($outlets as $outlet)
<tr>
<td>
<div class="switch m-b-md" data-id="{{$outlet->id}}">
<label>
@if($outlet->status == 'active')
<input id="agent-status" type="checkbox" checked="">
@else
<input id="agent-status" type="checkbox">
@endif
<span class="lever"></span>
</label>
</div>
</td>
</tr>
@endforeach
问题是当我点击.switch ajax 正在执行多次,如果我不断切换开关,它会执行超过 5 到 10 次
$(document).on("click", ".switch", function() {
var outlet_id = $(this).data('id');
$(".switch").find("input[type=checkbox]").on("change",function() {
var status = $(this).prop('checked');
if(status == true) {
status = "active";
} else {
status = "inactive";
}
$.ajax ({
url: '/manager/outlets/'+outlet_id+'/status',
type: 'POST',
data: {"id": outlet_id, "status": status, "_token": '{{ csrf_token() }}'},
success: function(data)
{
if(data.status==true) {
swal("Updated", "Status updated successfully", "success");
} else if(data.status==false) {
swal("Failed", "Fail to update status try again", "error");
}
},
error: function(error)
{
swal("Failed", "Fail to update status try again", "error");
}
});
});
});
谢谢
【问题讨论】:
-
从你的代码:每次用户点击
.switch你的代码添加新的change事件监听器,所以如果用户点击.switch两次,你将在内存中有两个相等的事件监听器并且每次点击都会添加新的和新的听众 -
@MysterX 谢谢你的回复,你能告诉我如何处理这个
-
添加为答案
标签: javascript jquery ajax laravel-5 laravel-blade