Rails 4-JavaScript停止工作,get:undefined不是一个函数
Rails 4 - JavaScript stopped working, getting: undefined is not a function
我有一个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"之间可能有一个不可打印的字符吗?
我追踪问题的顺序是:
- 首先,通过在代码之前和之后弹出警报来检查JS是否工作。但你的代码似乎已经达到了
- 您的初始化代码可能放错了地方:Turbolinks对初始化代码的位置有一些要求,但在运行生产版本之前,这可能不是问题
- 这个错误并没有具体说明问题出在哪一部分。甚至可能是对字符串中的"select"进行了求值。拆分此命令以确保您不会过快地跳转到正确的属性,方法是首先在参数哈希中指定一些绝对错误但可识别的内容。然后检查#("选择")是否有可用的结果(你的视图可能会被破坏)
记住,如果这个脚本崩溃,并且它是第一个初始化代码,那么大多数JS可能不会再被调用了。
我希望这些信息能为你指明正确的方向。。。。
- 创建一个类似链接的按钮,并通过Javascript函数打开一个新的弹出窗口
- 我可以在json对象中添加一个函数吗
- Javascript使函数一个接一个地执行
- 是JavaScript中的函数一个对象
- 两个几乎相等的jQuery函数;一个适用于IE,一个不适用于IE
- 两个Javascript函数一个window.onload=Custom.init;和一个window.onload=f
- 使javascript加载函数一个接一个地执行
- 如何通过两个嵌套的匿名函数(一个带有超时的事件处理程序)传递变量
- 为什么我不能让两个jQuery函数一个在另一个里面呢?
- 给函数一个变量名,而不是它的值
- 如何使用嵌入函数(一个滚动页由Pete - peachananr)
- 是否有可能给JavaScript函数一个类型/类?
- 确保两个函数一个接一个地执行,其中第一个函数内部有一个异步调用
- 两个不同的ajax函数一个接一个调用返回相同的值
- jQuery第一次更改函数一个工作
- 给这个函数一个id
- 如何给回调函数一个值一个变量在特定时刻
- 使用回调使两个函数一个接一个地运行
- 两个函数(一个用php)是否可以用“;onclick”;
- 两个几乎相同的函数.一个函数用Queue进行排队.Jquery效果在queued函数上不起作用.为什么