【问题标题】:CoffeeScript execute function on page loadCoffeeScript 在页面加载时执行函数
【发布时间】:2020-05-16 01:24:44
【问题描述】:

我编写了一个简单的咖啡脚本来根据下拉列表中的选定选项显示/隐藏日期选择器,它可以工作,但它有一个小缺陷 - 在我在日期选择器中选择日期并提交表单后,日期选择器消失了,我相信,这可能会让最终用户感到有些困惑。为了解决这个问题,我编写了额外的函数并在“窗口加载”时执行它,但这会破坏我的 Jasmine 测试,以至于整个测试套件甚至无法在本地和 CI 运行。

这是我写的代码。

  1. 根据从下拉列表中选择的值打开/关闭日期选择器的功能
$(document).on 'ready page:load page:restore', ->
  $('body').on 'change', '.filter_status', (ev) ->
    selected = ev.target.value
    if selected == 'option_1' || selected == 'option_2'
      $('#datepicker').show()
    else $('#datepicker').hide()
  1. 检查仍然选择了哪个选项并打开/关闭日期选择器的功能
toggleDatepicker = ->
    selected = $('.filter_status #status').children('option:selected').val()
    if selected == 'option_1' || selected == 'option_2'
      $('#datepicker').show()

在窗口加载时执行函数。

window.onload = toggleDatepicker

这很好,但是当我去http://localhost:3000/specs 运行 JS 测试时没有任何反应。我有超过 200 个测试,甚至没有一个运行,我所看到的只是一个空白页。它还破坏了我的 CI 测试构建,构建挂起。 你有什么想法我可以解决这个问题吗?

这是整个脚本。

$(document).on 'ready page:load page:restore', ->
  $('body').on 'change', '.filter_status', (ev) ->
    selected = ev.target.value
    if selected == 'option_1' || selected == 'option_2'
      $(#datepicker').show()
    else $('#datepicker').hide()

  toggleDatepicker = ->
    selected = $('.filter_status #status').children('option:selected').val()
    if selected == 'option_1' || selected == 'option_2'
      $('#datepicker').show()
  window.onload = toggleDatepicker

【问题讨论】:

    标签: javascript jquery coffeescript


    【解决方案1】:

    我想出了一个更简单的解决方案。我通过定义一个帮助器方法在我的 rails 模板中动态设置类,该方法根据从 UI 表单传递的查询字符串返回一个 css 类。

    【讨论】:

      最近更新 更多