Rails rails 升级到 3.1.1 之后 js 就死活都不好使了

douya0808 · 2012年04月13日 · 最后由 douya0808 回复于 2012年04月13日 · 3391 次阅读

我把 application.js 删除换成我自己的 js 文件了 因为我以为这里的内容都被//注掉了以为没用呢 但是网上有人说这东西还有用 好吧 那我用 scaffold 新建个表单来再加入 js...还是不好使=。=

3.1.1 是仲么了呢

页面文件:views/login/login.html.erb 表单字段的 id 分别为 we_ee 和 we_xx layout 文件:layouts/login.html.erb

<head>
  <title>首页</title>
  <%= stylesheet_link_tag "login" %>
  <%= javascript_include_tag "application" %>  
  <%= javascript_include_tag "yanzheng" %>
  <%= csrf_meta_tags %>
</head>

js 文件:assets/javascripts/yanzheng.js

function yanzheng() {
    if (document.getElementById("we_ee").value=="") {
        window.alert("请输入用户名");
        document.getElementById("we_ee").focus();
        return false;
    }

    if (document.getElementById("we_xx").value=="") {
        window.alert("请输入密码");
        document.getElementById("we_xx").focus();
        return false;
    }

    return true;
}

按理说这种问题已经不算问题了 但是就是不出来 尴尬-,- 我连那个 rake assets:precompile 命令也试过了

rake assets:clean

@Rei 敲了这个命名也是没有反应 这个小东西以前试过是好用的 那时候在学怎么往 ROR 里添 js, 当时有反应之后就感觉这样就算会往 ROR 里添 js 了 今天换到别的工程一用没反应 再回原来的小东西里试=.=...也没反应

lz 查看一下网页的源码,看看 js 的 URL 是否指向了正确的文件?

@zhangyuan 岂止正确 正确得令人发指-,-

<script src="/assets/jquery_ujs.js?body=1" type="text/javascript"></script>
<script src="/assets/tab.js?body=1" type="text/javascript"></script>
<script src="/assets/yanzheng.js?body=1" type="text/javascript"></script>
<script src="/assets/application.js?body=1" type="text/javascript"></script>

看到大家都那么厉害我天天还在这里纠结这些问题压力很大呀

/assets/tab.js?body=1 /assets/yanzheng.js?body=1 /assets/application.js?body=1

这三个文件里的内容,是否正确呢?

@zhangyuan

<head>
  <title>首页</title>
  <link href="/assets/login.css?body=1" media="screen" rel="stylesheet" type="text/css" />
  <script src="/assets/jquery.js?body=1" type="text/javascript"></script>
<script src="/assets/jquery_ujs.js?body=1" type="text/javascript"></script>
<script src="/assets/tab.js?body=1" type="text/javascript"></script>
<script src="/assets/yanzheng.js?body=1" type="text/javascript"></script>#第一次加载
<script src="/assets/application.js?body=1" type="text/javascript"></script>
  <script src="/assets/yanzheng.js?body=1" type="text/javascript"></script>#第二次加载
  <meta content="authenticity_token" name="csrf-param" />
<meta content="2hhRwRuJwb1xQ4GK9I5fNOeYgA4wPVxNRQU6YllRGrk=" name="csrf-token" />
</head>


完整的是这样的 但是我注意到 yanzheng.js 被加载了两回,而我的 layout 文件:layouts/login.html.erb 里面只写了加载一次 不知道是不是这个原因 -.-

实际上我这里 tab.js 这个 js 文件是可以正常工作的,而且他在这里也只被加载了一回 我的 yanzheng.js 是从以前可用的地方复制过来的应该也没有问题,所以我就怀疑是重复加载造成的,但是我不敢肯定 我也不知道为什么会被重复加载

好吧 我疯了 在桌面手动写个验证好使 在这里放到文件夹下加载就是没反应=.=天呐

冷静一下,我还没看明白你想干啥呢。

  1. javascript 链接对了没
  2. 编译出来的 js 内容对了没
  3. 是不是 javascript 内容没写对

我单看 1 楼不知道什么问题

我甚至把

<%=image_submit_tag("dl.gif")%>

写成了

<input type="submit" onclick="yanzheng()"/>

依旧没反应 这是我的终极大招了 于是我得出了结论=。=就是没加载进来

1.链接对了 在我的主页可以看到正确的加载路径 2.编译出来的内容?嗯? 3.js 的内容也是对的 我自己用记事本写了个表单然后用这个验证是有反应的

虽然我每天都来问这问那的 但是我觉得这个问题实在是太小了 直到我试了四天都没弄出来我就暴躁了-.-

浏览器打开这个文件 /assets/yanzheng.js,看看内容对了没

然后你的 js 代码是什么,目的是什么。我在 1 楼没看见执行的部分。

lz 冷静。我每次更新 rails 版本,就遇到一大堆问题。XD

贴一下你的 application.js 估计是你的 application.js 这句 require_tree .。如果有,把它去掉应该就可以了。


理由: yanzheng.js 加载了两次 asset piple 会加载 application.js(可配置) 里的 require * 注释。 require_tree . 的作用是加载 application.js 所在目录下所有的 js 文件。所以加载+1 javascript_include_tag 再加载了一次 +2

谢谢大家的帮助:)

再次表示感谢

需要 登录 后方可回复, 如果你还没有账号请 注册新账号