0

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

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

= 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>
4

1 回答 1

1

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

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

或者更短的形式:

$(function() {
  $('.levelup').click(function() { ... });
});
于 2013-09-27T02:47:46.983 回答