Javascript 在Rails应用程序中调用jQuery函数次数过多

Javascript 在Rails应用程序中调用jQuery函数次数过多,javascript,jquery,html,ruby-on-rails,Javascript,Jquery,Html,Ruby On Rails,在我的Rails应用程序中,我提交了一个UI操作(更改select值),但相应的函数被调用了两次。函数如下所示 // doc.js $(document).on("change", "select.class", (function(){ if ($("select.otherSelect").find(":selected").is( ":disabled" ) == false) { $.ajax({

在我的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
元素一次时,文本“Selector was change”在JS控制台中出现多次。在编写本文之前,连续六次更改
select
元素会导致函数被调用一次、两次、四次、八次、十六次、三十二次

为什么会这样?

您可以这样尝试:

$(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 )

我解决了这个问题。首先,我有一个完整的页面,其中的元素被
$(document).ready(function(){
)中的函数绑定。这成了一个问题,因为我使用
选择
以异步方式将页面中的许多元素替换为需要被这些函数绑定的新元素(但不是,因为绑定只发生一次)

为了解决这个问题,我将
$(document).ready(function(){
中的所有内容复制到一个
docReady()
函数中,然后在
$(document).ready(function()中调用
docReady()
){
和每当我异步重新加载页面内容时。这个策略导致了我的错误;现在我绑定了页面的每个元素,包括
选择
本身


现在,我在
$(文档).ready(函数()中只调用了一次
select
的绑定函数{
并且每次
select
更改其值时,我都会调用异步生成元素的绑定函数一次。

不清楚您的意思!我重新编写了一些内容,使其更易于阅读。基本上,我上面编写的函数在每个UI操作中都会被调用两次,而我只希望调用一次。您包括doc.js在你的应用程序中不止一次。它可能被明确地包含在你的布局中,也在你的资产管道中。我不这么认为,ilan berci。我在本地运行它,所以没有预编译资产(只是为了确保,我运行了
rake资产:clean
)。我检查了此页面加载的每个javascript文件,其中函数只列出了一次。此外,在编写本文之前,连续六次更改select元素会导致函数被调用一次、两次、四次、八次、十六次、三十二次。这不仅仅是每次调用两次我。这只允许我调用函数一次;我需要在每次更改
选择
时调用它一次。此外,额外的
属于那里。如果您进行检查,您将看到
之后
上的
在您的解决方案中不匹配。请立即单击
将变为红色。每隔
匹配一次,将变为绿色。