【发布时间】:2015-03-29 20:55:15
【问题描述】:
更新 2:
我通过将 javascript 直接移动到我的视图文件中暂时解决了我的问题,但我仍然想知道为什么当我使用 <a> 标签在页面之间移动时 Rails 没有重新加载我的 javascript 文件。
更新 1:
我尝试将代码分成 2 个视图,一个用于语言,一个用于文本更改。当我使用语言页面中的锚链接到文本页面时,即使我事先没有在语言页面上做任何其他事情,我的 home.js 文件的内容也不会再次运行。在没有再次运行 document.ready javascript 的情况下销毁和创建视图的事情正在发生。
原文: 我正在尝试构建一个具有多种语言支持的 Rails 应用程序,但是它将 javascript 分解到页面下方。在我看来,我有 2 个锚点可以在英语和法语之间切换,单击时刷新页面和所有文本,支持或不支持语言。这是意料之中的。
然而,当我点击这些链接中的任何一个后,我为页面下方的文本区域定义的 keyup javascript 事件会完全中断。我在 Rails 或 javascript 控制台中没有收到任何错误,它只是停止工作。
更令人困惑的是,虽然代码在我单击锚点之前有效,但我正在将 textarea 中的文本从页面加载时的默认值更改。单击锚点后,文本按预期更改回默认页面文本,并且我的 javascript 中断。如果我在页面中断后使用F5 刷新页面,不仅 javascript 工作并且新语言设置保存,而且 textarea javascript 仍在工作时的最旧值重新出现。
事件序列示例:
- 初始页面加载,默认文本为“Try it out!/72y 17 0u7!”
- 将文本更改为“试试看”,其他文本区域更改为“72y 17”
- 更改语言,重新加载页面,默认文本是“试试看!/72y 17 0u7!”,javascript keyup 事件停止工作,但我将第一个文本区域改为说“Hello World”
- 用 F5 刷新页面,javascript keyup 事件再次起作用,textareas 现在显示“Try it/72y 17”
home.html
<h3><%= t('intro-title') %></h3>
<p><%= t('intro-paragraph') %></p>
<a href="/?locale=en" type="button">English</a>
<a href="/?locale=fr" type="button">Français</a>
<textarea id="l33tify-in">Try it out!</textarea>
<textarea id="l33tify-out" disabled="true">72y 17 0u7!</textarea>
home.js
$( document ).ready(function() {
$('#l33tify-in').keyup(function(){
$.get('/l33tify_text', { 'l33tify_me' : $(this).val() }, function(data) {
$('#l33tify-out').val(data['l33tified']);
});
});
});
home_controller.rb
class HomeController < ApplicationController
before_action :set_locale
def set_locale
I18n.locale = params[:locale] || I18n.default_locale
end
def index
end
end
【问题讨论】:
标签: javascript jquery html ruby-on-rails ruby