javascript - 除非刷新,否则日期选择器不会显示在 Rails 中

标签 javascript ruby-on-rails datepicker

我将日期选择器放入 Rails (v4.1.8) 的表单中。我使用 eyecon datepicker (禁用过去的日期)。 http://www.eyecon.ro/bootstrap-datepicker/

  <div class="form-group">
    <label for="expiration" class="col-sm-2 control-label">
      Expiration
    </label>
    <div class="col-sm-10">
      <input type="text" class="span2 form-control" name="expiration" id="dpd1" data-date-format="yyyy-mm-dd">
    </div>
  </div>

如果我被定向到此页面,则当我单击日期表单时,日期选择器不会显示。但是,如果我在 chrome 中通过 control+r 刷新页面。日期选择器效果很好。 或者,如果我在网址栏中手动输入地址并按 Enter 键,日期选择器也可以工作。

这真是太奇怪了。有人可以给我解释一下吗?

另一个事实可能会有所帮助:如果我将代码保存为 html 而不是使用 Rails。效果很好。

谢谢

最佳答案

去过那里数百万次 - 这是因为 turbolinksturbolinks gem 使您的网站速度更快 - 当您单击任何导航链接时,它不会重新加载整个页面,而只会重新加载要更改的部分(这是对其功能的巨大简化,请阅读 here了解更多详情)

自然地,您的 JavaScript 不会被 Turbolink 跟踪,因此在加载新内容时不会执行它,从而使您的所有元素都没有任何钩子(Hook)或功能,而您通常在没有 Turbolink 的情况下会拥有这些功能。当您刷新页面时,整个页面都会加载,并且所有 JavaScript 都会执行,因此一切都会按预期工作。

我通常通过定义一个辅助方法来处理它:

window.onInit = function(handler) {
  $(document).on('ready page:change', handler)
}

然后包装所有要为其中每个页面运行的 javascript:

onInit(function() {
  $('#dpd1').datepicker();
}):

关于javascript - 除非刷新,否则日期选择器不会显示在 Rails 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27866331/

相关文章:

javascript - Rally 应用程序 SDK 2.0rc1 - 未捕获的 ReferenceError : rally is not defined

javascript - 添加到动态 DOM 元素的过渡

ruby-on-rails - FactoryGirl.create 不增加 `.count` 字段

ruby-on-rails - 嵌套 Rails 引擎

css - 更改 Angular 日期选择器 Material 组件的颜色

javascript - Chrome 中的 dispatchEvent 但 IE11 中没有

javascript - 如何获取事件按钮 ref 属性并将其分配给 vue.js 中的变量

ios - 您可以在 iOS 中使用任何 SQLITE3 数据库吗,或者是否有您应该匹配的特殊格式?

javascript - 根据下拉列表中选择的值设置日期时间选择器格式

twitter-bootstrap - 如何让 bootstrap-datepicker 与 Bootstrap 3 一起使用?