【问题标题】:Can't get jQuery .change() event to fire in Rails app无法在 Rails 应用程序中触发 jQuery .change() 事件
【发布时间】:2016-01-09 08:05:58
【问题描述】:

所以我一直在阅读有关如何让 jQuery 和 Turbolinks 很好地协同工作的几个小时,但我仍然无法让 .change() 触发。我添加了 jquery-turbolinks gem 无济于事。这是我的 CoffeeScript:

$(document).ready ->
  $("#data_type").change ->
    dt = $("#data_type").val()
    switch dt
      when "radio" then $("#radio_conditional").show()
      when "checklist" then $("#checklist_conditional").show()
      when "integer", "decimal"
        $("#units_conditional").show()
        $("#length_conditional").show()
      else $("#radio_conditional", "#checklist_conditional", "#units_conditional", "#length_conditional").hide()
  return
return

基本上,我希望表单上的某些字段仅在为选择器#data_type 选择某种数据类型时显示。我认为 $(document).ready 正在工作,但是当我更改数据类型时,无论我选择哪种类型,都没有任何反应。我知道 jQuery 正在工作,因为我可以在控制台中输入 $("#radio_conditional").hide() 并且它可以工作。我有一种感觉,我在这里遗漏了一些简单的东西,但我无法弄清楚。有任何想法吗?

这是我的 application.js:

//= require jquery
//= require jquery.turbolinks
//= require jquery_ujs
//= require bootstrap-sprockets
//= require nested_form_fields
//= require turbolinks
//= require_self
//= require_tree .
//= stub pages

这是我的 Gemfile:

source 'https://rubygems.org'
ruby "2.2.3"

# Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
gem 'rails', '4.2.4'
# Use postgresql as the database for Active Record
gem 'pg'
# Use SCSS for stylesheets
gem 'sass-rails', '~> 5.0'
# Use Uglifier as compressor for JavaScript assets
gem 'uglifier', '>= 1.3.0'
# Use CoffeeScript for .coffee assets and views
gem 'coffee-rails', '~> 4.1.0'

# Use jquery as the JavaScript library
gem 'jquery-rails'
# Turbolinks makes following links in your web application faster. Read more: https://github.com/rails/turbolinks
gem 'turbolinks'
# Turbolinks also screws up jquery. This gem fixes it.
gem 'jquery-turbolinks'
# Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder
gem 'jbuilder', '~> 2.0'
# bundle exec rake doc:rails generates the API under doc/api.
gem 'sdoc', '~> 0.4.0', group: :doc

# Use figaro for setting environment variables
gem 'figaro'

# Use simple_form for forms
gem 'simple_form'

# Use nested_form_fields to create forms for nested associations
gem 'nested_form_fields'

# Use bootstrap for easy CSS
gem 'bootstrap-sass'

【问题讨论】:

    标签: javascript jquery ruby-on-rails coffeescript turbolinks


    【解决方案1】:

    尝试将你的 js 包装在这个:

    var ready;
    ready = function() {
    
        // your code
    
    $(document).on('page:change', ready);
    

    这总是对我有用。

    【讨论】:

    • 似乎应该可以工作,但我尝试了使用和不使用 jquery-turbolinks,但仍然没有:(
    【解决方案2】:

    好的,我想通了。结果我试图在页面准备好时选择“#data_type”,但在我点击“添加变量”之前它实际上并不存在于页面上,因此选择器从未选择过。我将脚本更改为在单击“添加变量”时触发。现在都修好了,谢谢!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-07-18
      • 2021-02-10
      • 2011-04-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多