【问题标题】:$(document).ready doesn't fire when navigating to a new page$(document).ready 导航到新页面时不会触发
【发布时间】:2018-12-22 00:16:19
【问题描述】:

我正在开发一个 Rails 应用程序并放置一些 js 来启用提交按钮,只有当用户在输入中键入内容时。然后,我使用$(document).ready 调用该函数。当我第一次加载应用程序时它工作正常。但是,一旦我转到新链接,它就会停止工作。我一直在环顾四周,但建议的答案似乎都没有帮助。对此的任何帮助将不胜感激!

应用程序.js

//= require jquery
//= require popper
//= require bootstrap-sprockets
//= require rails-ujs
//= require turbolinks
//= require_tree .
//= require_self

// Global application events
var applicationHandler = (function() {
  // Per Design specs, a submit button on a form should be disabled until all form fields are filled out
  var verifyFormInputsBeforeSubmit = function() {
    $('form input').on('keyup', function() {
      var inputLengths = 0;
      var allInputs = $('input:not([type="submit"]');

      allInputs.each(function() {
        if ($(this).val()) {
          inputLengths += 1;
        }
      });

      if (inputLengths == allInputs.length) {
        $("input[type=submit]").removeAttr("disabled");
      } else {
        $("input[type=submit]").attr("disabled", "disabled");
      }
    });
  };

  return {
    verifyFormInputsBeforeSubmit: verifyFormInputsBeforeSubmit
  };
})();

$(document).ready(function() {
  console.log("wee");
  applicationHandler.verifyFormInputsBeforeSubmit();
});

我如何链接到新页面:

<%= link_to "Forgot password?", new_password_path(resource_name), class: 'small float-right' %>

需要注意的是wee在我加载索引页面时出现在控制台上,但是当我进入忘记密码页面时没有任何显示。如果我刷新忘记的密码,我会在控制台中看到wee 并运行js。

【问题讨论】:

  • 这是因为 turbolinks gem。尝试用$( document ).on('turbolinks:load', function()替换$(document).ready(function()
  • 谢谢,效果很好。我从来不知道 turbolinks gem 会这样做!

标签: javascript ruby-on-rails


【解决方案1】:

我相信这与 turbolinks 有关,页面实际上并没有重新加载,因此您需要通过不同的事件运行您的代码: Rails 5: how to use $(document).ready() with turbo-links

【讨论】:

  • 就是这样!谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-31
  • 1970-01-01
  • 2017-12-24
  • 2014-04-20
  • 1970-01-01
  • 2011-04-27
相关资源
最近更新 更多