javascript - jQuery函数在每次点击时运行多次
问题描述
作为 JS 的一部分,我具有以下功能。
_RenderVendorView
当点击供应商表的一行时会触发,它会显示供应商详细信息页面,并且在供应商详细信息视图页面中有一个带有 class 的按钮.vendorsListButton
,它将返回到供应商表,表示将触发_RenderVendorsList
var _RenderVendorsList = function () {
$(document).on('click', '.vendorsListButton', function () {
jQuery.ajax({
url: "/purchases/render_vendors_list",
type: "POST",
success:function(data){
$data = $(data); // the HTML content that controller has produced
$('#vendorcontainer').hide().html($data).fadeIn();
_TableVendors();
_RenderVendorForm();
}
});
});
};
var _RenderVendorView = function () {
$(document).on('click', '#tableVendors tbody td:not(:first-child)', function () {
if ($(this).index() == 4 ) {
// provide index of column in which we want prevent row click here is column of 4 index
return;
}
else{
var rowdata = $('#tableVendors').DataTable().row($(this).parents('tr') ).data();
jQuery.ajax({
url: "/purchases/render_vendor_view",
type: "POST",
data: {vendor:rowdata.vendor_id},
success:function(data){
$data = $(data); // the HTML content that controller has produced
$('#vendorcontainer').hide().html($data).fadeIn();
_TableBills(rowdata);
_TableExpenses(rowdata);
_RenderVendorsList();
}
});
}
});
};
现在,问题是第一次点击行打开供应商页面和第一次点击.vendorsListButton
返回供应商列表,第二次点击行也打开供应商页面,但是当第二次点击.vendorsListButton
将运行_RenderVendorsList
两次,并且在每个迭代函数运行增加.. .
不知道为什么它来回运行多次。
这个循环有什么问题?
解决方案
.off()
:该.off()
方法删除了使用 .on() 附加的事件处理程序
你可以这样:
$(document).off('click', '.vendorsListButton').on('click', '.vendorsListButton', function () {
//Your event logic here
...
}):
它将首先分离事件,然后附加一个新的事件,以防止重复。
更好的解决方案:
由于您使用的是事件委托,您可以只附加一次事件,即使是新添加的行,它也可以工作,因此无需_RenderVendorsList()
每次都调用。
因此,只需删除_RenderVendorsList();
另一个事件内的行,并在开始时调用它一次。
也许像:
var _RenderVendorView = function () {
_RenderVendorsList();
$(document).on('click', '#tableVendors tbody td:not(:first-child)', function () {
...
推荐阅读
- javascript - Mongoose Schema,存储一个可能有也可能没有属性的对象
- reactjs - 如何识别路由是通过history.push还是手动地址更改(react-router)启动的
- r - 在 R 中的隆起建模中识别患者分组
- c# - 如何安排作业在 FPU/AVX 上运行?
- python - 卷积神经网络的输入形状
- string - LUA 计数字符串中的重复字符
- python - 字符之间的匹配空间(行首除外)
- javascript - 我可以从 docker 运行 maven 工件吗
- javascript - 从文本中创建一个纯 JavaScript 对象进行拖放
- c++ - 从另一个类传递指向私有成员函数的指针