javascript - 使用 AJAX 时多次触发更改事件

标签 javascript jquery ajax

我有一些医生在 <select id="doctors">字段。
在更改时,会触发 AJAX 请求,提取与所选用户相关的位置。
这些检索到的位置然后填充 <select id="locations">领域。
同样,关于这一秒的变化 <select>触发对 'single-location.php' 的 AJAX 请求检索页面……好吧,单个位置的数据。

简而言之,它是经典父子下拉列表的一个版本。

问题是改变 <select id="locations">字段触发 N 个 AJAX 请求,其中 N<select id="doctors"> 中的更改次数字段。

即,如果我改变了 <select id="doctors">字段 3 次,更改时 <select id="locations">我有 3 个 AJAX 请求 'single-location.php' .

医生领域的10个变化?确保位置字段的更改将触发 10 个 AJAX 请求到 'single-location.php' .

我做了一个fiddle example接近我的真实示例,但 fiddle 按预期工作:当更改 doctors 字段几次然后更改 locations 字段时,控制台显示只有一个请求,这正是我所期望的

我的真实例子就像 fiddle 一样,除了医生的<select>我有 select2 插件,AJAX 请求当然是真实的。

深入挖掘,似乎问题出在功能上:

$('#locations').on('change', function(){
    getLocationData();
});

或者,更好的是,在 change 中事件,被触发不止一次,与 AJAX 请求本身无关。事实上,如果我改变:

$('#locations').on('change', function(){
    console.log('changed…');
});

消息被记录 N 次。

我发现的解决方法是添加 .off()像这样的方法:

$('#locations').off().on('change', function(){
    getLocationData();
});

但问题是:为什么它会这样工作?为什么更改事件会根据不应直接相关的另一个字段上的更改触发 N 次?

谢谢

最佳答案

代码正在做你告诉它做的事情(关于代码的有趣的事情 - 似乎所有发生的“神秘”事情都与编码错误有关......:)

These retrieved locations then populate a field.

这会触发“更改时”代码 - 当您“填充”时,这是一个更改....

您的变通办法看起来是执行您想要的操作的好方法。

另一种方法是仅在 ajax 完成时添加“on change”。有点像……

$.post('link', function(){
    //populate the 'locations' select and add the .change
    $("#locations").add(NOTE: however you are populating it - you should show the code....)
        .change(function(){
        getLocationData();}
});

这只是简单的示例代码(即,它不会工作....)因为你没有展示足够多的东西让我给你“工作”的东西,但它应该给你一些关于如何处理的想法这 - 以及“问题”所在。

关于javascript - 使用 AJAX 时多次触发更改事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51232021/

相关文章:

javascript - 网页 | CSS | JS – Flip Cards 可以与 1 一起使用,但不能与 4 一起使用

javascript - 如何在 MVC 中使用 ajax 使用新从服务器获取的数据重新初始化 dataTables

javascript - 输入键以提交 Ajax 表单

jquery - 检测鼠标左右移动和无移动

javascript - 如何将图像添加到多个div

javascript - 如何将元素之前的所有 div 移到元素之后?

javascript - 对 django View 的 Ajax 请求未返回响应

javascript - 窗口确认在ajax post中打印html标签

javascript - 异步还是同步?当我们设置 Image 对象的 src 属性时?

javascript - 增量运算符在这里做什么以及它如何改变比例?