Rails 4-JavaScript停止工作,get:undefined不是一个函数

Rails 4 - JavaScript stopped working, getting: undefined is not a function

本文关键字:函数 一个 停止工作 4-JavaScript get undefined Rails      更新时间:2023-09-26

我有一个Rails应用程序,在其中我使用gem chosen-rails(或选定的sass引导轨):在我的gemfile中,我有这个:

gem 'chosen-sass-bootstrap-rails'

以前它可以工作,但现在我经常出现这个错误——我不知道为什么:

[Error] TypeError: undefined is not a function (evaluating '$('.chosen-  select').chosen({
  allow_single_deselect: true,
  no_results_text: 'No results matched',
  width: '100%'
})')

我的application.js看起来像这样:

//= require jquery
//= require jquery_ujs
//= require bootstrap
//= require jquery.turbolinks
//= require chosen-jquery
//= require scaffold
//= require jquery.purr
//= require best_in_place
//= require bootstrap-datepicker
//= require jquery-fileupload
//= require autocomplete-rails
//= require jquery-ui
//= require jquery.countdown
//= require autocomplete-rails
//= require bootstrapValidator.min
//= require turbolinks
//= require_tree .

application.css.scss中,我有这样一行:

*= require chosen_bootstrap

我的HTML(或(HAML)看起来像这样:

= select_tag "tag", options_from_collection_for_select(@team_tags, 'name', 'name', params[:tag]), prompt: "All tags", class: 'form-control chosen-select select-ideas-tag', onchange: "window.location.replace('/teams/#{@team.id}/tags/' + this.value + '?search=#{params[:search]}');"

我的JS(或CoffeeScript)看起来是这样的:

# enable chosen js
$('.chosen-select').chosen
  allow_single_deselect: true
  no_results_text: 'No results matched'
  width: '100%'

有什么想法为什么它不起作用吗?

更新

似乎不仅chosen-rails停止了工作,JS也完全停止了工作。我的图书馆没有一个像预期的那样运作。我试着重建和清理我的资产,但无济于事。

不确定是什么原因导致了这种情况,也不知道如何找到主要问题。

有什么想法吗?

可能的原因:

在应用程序中同时包含jquery和selected两次。双重包含任一项都可能导致此错误。

你也可以试试这个,

//=需要jquery

//=需要jquery。涡轮链接

//=需要jquery_ujs

//=需要选择jquery

//=需要支架

//=需要jquery.purr

//=需要jquery ui

//=需要引导

//=需要jquery.countdown

//=需要涡轮链接

//=require_tree。

为什么需要jquery.turbolink和涡轮链接。你能禁用涡轮连杆并检查吗?

原来我要包含jQuery两次。一次在application.html中,也在application.js中。删除application.html中的一个使其工作。

您建议所有JS都停止工作,这表明您的初始化代码导致了一个错误:它停止了对JS代码的所有进一步评估。该错误显示"selected-select"之间的一些间距(多一点表示问题)。短划线和"select"之间可能有一个不可打印的字符吗?

我追踪问题的顺序是:

  1. 首先,通过在代码之前和之后弹出警报来检查JS是否工作。但你的代码似乎已经达到了
  2. 您的初始化代码可能放错了地方:Turbolinks对初始化代码的位置有一些要求,但在运行生产版本之前,这可能不是问题
  3. 这个错误并没有具体说明问题出在哪一部分。甚至可能是对字符串中的"select"进行了求值。拆分此命令以确保您不会过快地跳转到正确的属性,方法是首先在参数哈希中指定一些绝对错误但可识别的内容。然后检查#("选择")是否有可用的结果(你的视图可能会被破坏)

记住,如果这个脚本崩溃,并且它是第一个初始化代码,那么大多数JS可能不会再被调用了。

我希望这些信息能为你指明正确的方向。。。。