【发布时间】:2015-02-20 00:34:21
【问题描述】:
我有一个如下所示的posts.js 文件:
var ready;
ready = function() {
var toggleSidebar = $(".togglesidebar");
var primary = $("#primary");
var secondary = $("#secondary");
toggleSidebar.on("click", function(){
if(primary.hasClass("col-sm-9")){
primary.removeClass("col-sm-9");
primary.addClass("col-sm-12");
secondary.css('display', 'none');
}
else {
primary.removeClass("col-sm-12");
primary.addClass("col-sm-9");
secondary.css('display', 'inline-block');
}
});
};
var counter = function(event) {
var fieldValue = $(this).val();
var wc = fieldValue.trim().replace(regex, ' ').split(' ').length;
var regex = /\s+/gi;
var $wcField;
var maxWc;
if ($(this)[0] === $('#post_title')[0]) {
$wcField = $('#wordCountTitle');
maxWc = 7;
} else {
$wcField = $('#wordCountBody');
maxWc = 150;
}
$wcField.html(wc);
$wcField.toggleClass('over-limit', wc > maxWc);
};
$(document).ready(ready);
$(document).on('ready page:load', function () {
$('#post_title, #body-field').on('change keyup paste', counter);
});
在我的application.html.erb 页面中,我有这个:
<div id="secondary" class="col-sm-3 sidebar" style="display: none;">
<aside>
<div class="about">
<h4>Submit Report</h4>
<%= render "posts/form" %>
</div>
</aside>
</div> <!-- /#secondary -->
当我切换这个 div 并显示 _form 部分时,JS 在这些字段中工作正常。
但如果我去posts/new 或/posts/:id/edit,它不会。
即使我检查该页面的来源,我也会看到其中包含post.js。
这可能是什么原因造成的?
编辑 1
我正在使用 Turbolinks,如果这很重要的话。
编辑 2
根据答案中的建议,我尝试了这个:
var ready;
ready = function() {
// This is the Sidebar toggle functionality
var toggleSidebar = $(".togglesidebar");
var primary = $("#primary");
var secondary = $("#secondary");
$(document).on("click", ".togglesidebar", function(){
if(primary.hasClass("col-sm-9")){
primary.removeClass("col-sm-9");
primary.addClass("col-sm-12");
secondary.css('display', 'none');
}
else {
primary.removeClass("col-sm-12");
primary.addClass("col-sm-9");
secondary.css('display', 'inline-block');
}
});
};
但这并没有奏效。
我遇到的关键问题是“计数器”,即#wordCountTitle 和#wordCountBody 在我的/posts/new 上不起作用,即使它们在posts/index 被激活时在posts/index 上起作用.
【问题讨论】:
-
您是否将该文件包含在 app/assets/javascripts 下的 application.js 文件中?听起来像是资产管道问题。
-
我的
application.js中有//= require_tree .。那应该涵盖我的 JS 目录中的所有内容吗? -
你在使用turbolinks吗?
-
@John 是的。我确定。
-
Turbolinks 会导致在页面之间加载 JavaScript 时出现问题。 JavaScript 的哪一部分没有被触发?尝试在
$(document).ready(ready);之后添加$(document).on('page:load', ready);
标签: javascript jquery ruby-on-rails ruby-on-rails-4 asset-pipeline