jQuery即使在Rails 4应用程序中加载(加载了jquery.turbolinks)也没有触发

时间:2013-09-26 21:30:35

标签: jquery html ruby-on-rails ajax haml

我有一个rails应用程序,当点击一个链接时jQuery没有在页面上触发,尽管它应该是。我想要发生的是,如果单击链接,则警报消息将关闭,并且AJAX响应将发送到控制器。我已经关闭了点击链接的turbolinks,以及加载的jquery.turbolinks,这应该已经解决了这个链接的问题(并且在过去)。我正在使用Ruby on Rails 4.欢迎任何见解!

在位于views的index.html.haml文件中,我有

= link_to "To be added", "#", :class => "levelup", 'data-no-turbolink' => true

现在在application.js文件夹中的javascripts文件中,我已加载这些行:

//= require jquery
//= require jquery.turbolinks
//= require jquery_ujs
//= require turbolinks
//= require_tree .

位于stats_uploader.js文件夹中的javascripts文件,可能应该执行警报,而ajax文件包含此文件:

$('.levelup').click(function() { 
  alert("Yeah");

  var level = $('.playerlevel').text();
  alert(level); //Pat
  level++;
  alert(level); //Pat

  $.ajax({type: "GET",

    url: $(this).attr("href"),
    dataType: "script",
    data:  level ,
    error: function() {
      alert("AJAX failed");
    },
    success: function() {
      alert("Success");
    }

  });
});

当我在页面上查看源代码时,我得到这些相关的行,表示已加载stats_uploader表单,以及应用于元素的相应类。

    <script data-turbolinks-track="true" src="/assets/jquery.turbolinks.js?body=1"></script>
    <script data-turbolinks-track="true" src="/assets/turbolinks.js?body=1"></script>
    <script data-turbolinks-track="true" src="/assets/stats_uploader.js?body=1"></script>

...
...
...
...
      <div class='container'>
        yessir
        Player Level
        <div class='playerlevel'>
          1
        </div>
        <!-- TODO Make Buttons to click on -->
        <a class="levelup" data-no-turbolink="true" href="#">To be added</a>
      </div>

1 个答案:

答案 0 :(得分:1)

如果您的页面结构如图所示,则问题可能是您尝试连接页面中尚不存在的链接上的单击处理程序。您需要将click设置包含在$(document).ready函数中:

$( document ).ready(function() {
  $('.levelup').click(function() { ... });
});

或缩短形式:

$(function() {
  $('.levelup').click(function() { ... });
});