在我的Rails应用程序中,我正在提交单个UI操作(更改select
值),但相应的函数被调用两次。功能如下。
// doc.js
$(document).on("change", "select.class", (function(){
if ($("select.otherSelect").find(":selected").is( ":disabled" ) == false) {
$.ajax({
//Ajax call
});
console.log("Selector was changed")
}
}));
我知道函数被多次调用,因为当我仅更改select
元素一次时,JS控制台中出现了“Selector was changed”文本不止一次。在写这篇文章之前,连续六次更改select
元素会导致函数被调用一次,然后两次,然后是四次,然后是八次,然后是十六次,然后是三十二次。
为什么会这样?
答案 0 :(得分:1)
我解决了这个问题。首先,我有一个整个页面,其元素由$(document).ready(function() {
中的函数绑定。这成了问题,因为我使用select
异步地用页面中的许多元素替换需要被这些函数绑定的新元素(但是没有,因为绑定只发生一次)。
为了解决这个问题,我将$(document).ready(function() {
中的所有内容复制到函数docReady()
中,然后在docReady()
内调用$(document).ready(function() {
,每当我异步重新加载内容时这页纸。这个策略引起了我的错误;现在我绑定了页面的每个元素,包括select
本身!
现在,我在select
中只调用了一次$(document).ready(function() {
的绑定函数,并且每次select
更改它时,我都会调用异步生成的元素的绑定函数值。
答案 1 :(得分:0)
您可以尝试这样:
$(document).on("change", "select.class", (function(){
if($(this).data('clicked')) {
return;
}
if ($("select.otherSelect").find(":selected").is( ":disabled" ) == false) {
$.ajax({
//Ajax call
});
console.log("Selector was changed")
}
$(this).data('clicked', true);
}); //removed here was extra )