JS直到第二次刷新页面才运行

时间:2015-03-15 13:33:03

标签: javascript ruby-on-rails-4

正如它所说的那样。我正在尝试使用jquery进行一些简单的下拉过滤,并且我的函数不会在页面加载时执行。这是我检查的内容:

  • 添加了一个console.log来验证
  • 使用document.ready来调用函数
  • 它是通过app.js
  • 中的链轮加载的
  • 它在开发者控制台中列出,我没有得到任何资源未找到错误

这是疯狂的部分:一次刷新后一切都很完美。 Console.log返回并报告监听器已附加到选择元素,一切都是玫瑰。

任何想法为什么?

编辑这里是整个js(可能有更好的方法,也可以接受建议):

//unrelated JS


$(document).ready(function(){
  $("#user_state_code option").unwrap();
  $state_copy = $("#user_state_code").children().clone(true);

  $("#user_country_code").change(function(){
    console.log("state filter called");
    filterStates($("#user_country_code").val());
  });

  $("#user_country_code").change();
});

function filterStates(countryCode){
  $("#user_state_code").html(
    $state_copy.get().filter(function(d){
      var currCountry = String(d.value);
      return currCountry.slice(0,2) == countryCode;
    })
  );
}

后记

以下是需要修复的内容(感谢@Rain让我走上正轨,并促使我找到了这个惊人的资源:Rails 4 turbo-link prevents jQuery scripts from working

var ready = function() {
  $("#user_state_code option").unwrap();
  $state_copy = $("#user_state_code").children().clone(true);

  $("#user_country_code").change(function(){
    console.log("state filter called");
    filterStates($("#user_country_code").val());
  });
  filterStates($("#user_country_code").val());
};

function filterStates(countryCode){
  $("#user_state_code").html(
    $state_copy.get().filter(function(d){
      var currCountry = String(d.value);
      return currCountry.slice(0,2) == countryCode;
    })
  );
}

$(document).ready(ready);
$(document).on('page:load', ready);

0 个答案:

没有答案