加载另一个页面后 JavaScript 停止工作

标签 javascript html ruby

我是 JavaScript 新手,试图了解为什么我的 on 事件监听器不起作用。我在 stackoverflow 上找到了类似的帖子,但这些解决方案对我不起作用。

var search = function( event ) {
    alert("bobo")
   $.get("http://localhost:3000/search", {"search" : $("#Search-Bar").val()}, function(data, status){
        if(status == "success")
           $(".centering.text-center").html(data)
    })
}

var attachListeners = function(){
    $("#Search").on("click", search)
    $("#SearchIcon").click( () => search() )
    $("#Search-Bar").keypress( event => (event.KeyCode == 13 || event.which == 13) ? search() : undefined )
}

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

我的网站不是单页应用程序。我已将监听器附加到我的导航搜索栏,在其中通过导航链接加载不同的 View ,并且我的服务器(ruby 后端)上传一个新的 html 页面。

在第一次加载时,我注意到文档准备被调用,并且其他一切都正常。打开并单击。在我使用导航并加载不同的 html 页面后,我的事件消失了。在我的 html View 中,我的搜索栏、搜索图标和搜索文本具有一致的 id已经结束了我尝试过使用 window.load()并为我的 body 添加 onload 属性 <body onload=attachListeners()>但都不起作用(也许我没有正确使用它们)。我还注意到,当我渲染下一个 html View 时,我的 docment.ready没有被调用。但是,如果我使用 F5 强制刷新页面,该 html 页面的监听器将再次处于事件状态。我在这里错过了什么我不明白的事情?

最佳答案

看起来您可能正在使用 Turbolinks ,来自该项目的自述文件:

When you follow a link, Turbolinks automatically fetches the page, swaps in its <body>, and merges its <head>, all without incurring the cost of a full page load.

由于这个库使得页面只加载一次,所以正常的 javascript window.onloadDOMContentLoaded 和 jQuery ready 事件不会初始页面加载后无法运行,您必须使用

document.addEventListener("turbolinks:load", function() {

而不是那些。如果您不熟悉 Turbo Link,我建议您阅读该自述文件以了解其全部内容。

我从来不明白为什么 Rails 团队会把这样的东西放在 Rails 中并默认启用它,自从他们进行更改以来,在我所做的每个项目中,我做的第一件事就是卸载它,当我忘了这样做,我在项目中花了几个小时后想知道为什么我的 javascript 被破坏了。

关于加载另一个页面后 JavaScript 停止工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47299292/

相关文章:

javascript - "This application does' 没有 javascript 就无法工作”在 android 中通过对话框流 iframe 代码

ruby - 不要附加但覆盖记录器的日志文件

sql - ActiveRecord Hash 形式表示 update_all ("prio = prio + 200")

javascript - 如何根据随机数(骰子)在游戏板上来回移动?

SignalR 中的 Javascript 语法

javascript - InnerText 不会在 html 中更新

ruby-on-rails - 在 Rails3 中使用 .where 方法

javascript - jQuery 代码仅在第二次单击后才起作用

jquery - 计算 div 何时触底的最佳方法?

html - 鼠标悬停时如何更改整个网站背景颜色