gpt4 book ai didi

当我从链接访问页面时,Javascript 第一次没有执行

转载 作者:可可西里 更新时间:2023-11-01 02:38:36 26 4
gpt4 key购买 nike

我的 Rails 应用程序中有一个模板,当它通过单击我主页中的链接加载时,它不会在第一次执行 javascript 代码。它仅在从链接访问时发生,并且仅在第一次访问时发生。我不知道为什么会这样。有什么帮助吗?这是代码。

首页:

#app/views/static_pages/home.html.erb
#...
<%= link_to "Nofify an absence", new_cancellation_path %>

这是 Javascript 文件:

//app/assets/javascripts/cancellations_new.js

var validateDateTime = function(){
// some other code that returns true or false
}
$(document).ready(function(){
$("#new_cancellation").submit(function(event){
event.preventDefault();
if (validateDateTime()) {
alert("Some alert");
}
else {
// some more code
}
});
});

以及应该执行 javascript 的模板:

#app/views/cancellations/new.erb

<%= provide(:title, "Notify an absence")%>
<div class="row">
<div class="span3 offset4">
<h3> Notify an absence </h3>

<%= form_for @cancellation, :id => "new_cancellation" do |f| %>
<%= render 'shared/error_messages' %>
<% # some form elements...%>
<%= f.submit "Send", class: "btn btn-primary"%>
<% end %>
</div>
</div>

我已经尝试添加 //= require cancellations_newapp/assets/javascripts/application.js没有改善

编辑

我在@radubogdan 的领导下做了一些研究,我发现 Turbolinks 是造成 Javascript 的“奇怪”行为的原因。如果您在应用程序中激活了 Turbolinks,<a>从 Ajax 请求加载元素,然后使用内容修改 <body>你的 HTML。由于加载DOM的方式不是通常的方式,

里面写的代码

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

除非页面完全重新加载(例如刷新浏览器),否则不会工作。如果你想让你的 Javascript 像往常一样运行,你可能需要改变你的

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

$(document).on("page:change", function() {
// some more code.
});

您可以找到有关此主题的更多信息 here
more

最佳答案

我认为 turbolinks 是问题所在。您是否尝试停用它?

将其从 application.js 和使用样式表链接标记的 layout.html.erb 中删除。

如果它在没有 turbolinks 的情况下工作,那么你应该检查如何使用

$(document).on('page:load', .....)

谢谢

关于当我从链接访问页面时,Javascript 第一次没有执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23436210/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com