【问题标题】:JavaScript loading out of timeJavaScript 加载超时
【发布时间】:2016-08-29 16:42:52
【问题描述】:

我在一个 Rails 项目中工作,我正在做一个简单的点击提醒功能,如下所示:

html.erb

<%= button_tag 'button', type: 'button', class: 'right-button' %>

JavaScript

$(".right-button").on("click", alert("right-button clicked!"));

问题是当我加载页面(ctrl + F5)时,甚至没有按下按钮就触发了警报,当我按下按钮时,什么也没有发生。我已经尝试过使用:

$(document).ready(function() { 
});

但它也没有工作。我什至尝试将 JavaScript 放入 html.erb

<%= button_tag 'button', type: 'button', class: 'right-button' %>
<script type="text/javascript">
  $(".right-button").on("click", alert("right-button clicked!"));
</script>

如果你知道发生了什么,请帮忙,谢谢!

PS:Turbolinks 被禁用!

【问题讨论】:

    标签: javascript jquery html ruby-on-rails ruby-on-rails-4


    【解决方案1】:

    那是因为您会立即调用您的alert。函数后的括号表示您正在调用该函数。

    您想要做的是从您的点击处理程序的回调中调用alert,这样当为您的点击事件调用回调时,alert 就会触发。

    // Incorrect
    $(".right-button").on("click", alert("Immediately Invoked"));
    
    // Correct
    $(".right-button").on("click", function() {
      alert("Invoked on-click");
    });
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <button class="right-button">Click Me!</button>

    此外,如果元素是动态注入的,您将不得不求助于事件委托来处理。

    $('.add-section').on('click', function() {
      $('#container').append('<section><button class="click-me">Click Me!</button></section>');  
    });
    
    $('#container').on('click', '.click-me', function() {
      alert('Event delegation!!!!!!!!!!!');
    });
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    
    
    <div id="container">
      <button class="add-section">Add section!</button>
    </div>

    它的作用是针对动态内容的父节点并将点击处理程序附加到它。我们传递与将动态添加的节点匹配的选择器。在#container 内的节点上发生的任何点击都将被检查以查看它们是否与.click-me 匹配,如果匹配,则将触发回调。

    【讨论】:

    • 你说的很有道理。我这样做了,但它也没有加载。当我将代码复制到控制台 (F12) 时,它可以工作,但不在正确的代码内。
    • “它可以工作,但不在正确的代码中”,你能详细说明一下吗?您还可以尝试更新您的实际代码,而不是在控制台中,然后尝试一下吗?使用您正在使用的确切代码更新问题也将是有益的。
    • 我的意思是当我从控制台执行时它正在工作,但是当我加载页面时没有任何反应。正如我所展示的,代码很简单。我认为问题在于 Rails 在加载 JS 时正在做的事情。
    • 你只在 chrome 控制台中测试这个吗?或者您是否更新了您的 javascript 文件以包含正确的示例?您只希望它在单击按钮时发出警报,对吗?
    • 不,我正在同时测试它。我按照您的建议更新了 JavaScript 文件,但它不起作用,只有当我从控制台运行它时。是的,当点击按钮时。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-17
    • 1970-01-01
    • 2012-09-09
    • 2012-03-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多