Javascript 引导开关事件处理程序在Safari或Firefox中不工作

Javascript 引导开关事件处理程序在Safari或Firefox中不工作,javascript,ruby-on-rails,ruby,twitter-bootstrap,bootstrap-switch,Javascript,Ruby On Rails,Ruby,Twitter Bootstrap,Bootstrap Switch,问题: Bootstrap开关在某些浏览器中不切换,仅在重新加载页面时加载,而不是在首次访问时加载。(我是否需要将此作为两个单独的问题?) 说明: 我一直在研究这一点,终于弄明白了为什么事件开关没有被触发。但是,当用户第一次导航到该页面时,该开关仍然不会显示。他们必须重新加载页面才能显示交换机。此外,该开关在Chrome中正常工作,但在Safari和Firefox中不正常。(如本视频所示: 版本: Ruby:2.2.1p85(2015-02-26修订版49769)[x86_64-darwin14

问题:

Bootstrap开关在某些浏览器中不切换,仅在重新加载页面时加载,而不是在首次访问时加载。(我是否需要将此作为两个单独的问题?)

说明:

我一直在研究这一点,终于弄明白了为什么事件开关没有被触发。但是,当用户第一次导航到该页面时,该开关仍然不会显示。他们必须重新加载页面才能显示交换机。此外,该开关在Chrome中正常工作,但在Safari和Firefox中不正常。(如本视频所示:

版本:

Ruby:2.2.1p85(2015-02-26修订版49769)[x86_64-darwin14]

Rails:4.2.0

宝石:

狩猎:8.0.8(10600.8.9)

Firefox:24.0(我注意到这是一个非常旧的版本,因为40.0.2是他们当前的版本)

Chrome:45.0.2454.93(64位)

我的代码:

Gemfile

gem 'bootstrap-switch-rails', '~> 3.3.3'
app/assets/javascripts/application.js

//= require jquery
//= require jquery_ujs
//= require turbolinks
//= require_tree .
//= require bootstrap-sprockets
//= require bootstrap-switch
app/assets/stylesheets/application.css

/*
*= require_tree .
*= require_self
*= require bootstrap3-switch
*= require rails_bootstrap_forms
*/
此代码添加到下一页的
信息中:

app/views/layouts/_header.html.erb

<script type="text/javascript">
    $(document).ready(function() {
        $('input:checkbox').bootstrapSwitch();
    });
</script>

$(文档).ready(函数(){
$('input:checkbox').bootstrapSwitch();
});
这些信息在页面上

app/views/design/registrations/edit.html.erb

<div class="col-md-3">
    <%= f.label :private, "Private" %>
    <%= f.check_box :private, :data => { :size => 'large', 'on-color'=>'success', 'on-text'=>'On', 'off-text'=>'Off', 'animate'=>'true'}, :label=>'This sets your profile to be hidden from searches' %>
</div>

{:size=>'large','on color'=>'success','on text'=>'on','off text'=>'off','animate'=>'true'},:label=>'这会将您的配置文件设置为在搜索中隐藏'%>
问题:

1) 为什么交换机不在初次访问时加载,而只在重新加载页面时加载


2) 为什么开关只能在Chrome中正常工作,而在Safari和Firefox中却不能正常工作?

在研究了我问题的第一部分后(为什么开关不能在初次访问时加载,只能在重新加载页面时加载?),我给出了以下答案,这也解决了第二个问题(为什么开关只能在Chrome中正常工作,而不能在Safari或Firefox中正常工作?)

我发现了一个关于StackOverflow()的问题,@Ian提供的答案解决了我的两个问题

解决方案:

@伊恩建议使用一种叫做宝石的宝石

代码

这是我添加/更改的代码(我按照上的说明操作)

Gemfile(添加了以下行):

app/assets/javascripts/application.js(我添加了这一行):

并将我的资产顺序更改为如下所示:

//= require jquery
//= require jquery.turbolinks
//= require jquery_ujs
//= require_tree .
//= require bootstrap-sprockets
//= require bootstrap-switch
//= require turbolinks
说明:

因此,除非页面被刷新,否则开关不会显示的原因是turbolinks函数。这通过AJAX调用页面上的信息,而无需重新加载CSS和JQuery。这使得页面加载速度更快,是一个很好的功能;但是,可能会导致一些问题,如我看到必要的JQuery在初始页面加载时未调用asn

这个gem()通过调用JQuery解决了这个问题,但仍然使用turbolinks

现在,这一定也是JQuery没有正确加载的问题,即使在刷新页面时也是如此,这导致了切换出现错误。现在脚本都正确运行了,切换在Safari、Chrome和Firefox中都正确运行。因此,这两个问题都解决了

//= require jquery.turbolinks
//= require jquery
//= require jquery.turbolinks
//= require jquery_ujs
//= require_tree .
//= require bootstrap-sprockets
//= require bootstrap-switch
//= require turbolinks