ruby-on-rails - 我的 js 文件中有两个 ajax 获取请求。我无法阻止第二个请求中的默认行为
问题描述
我的第一个 ajax 调用工作正常 - 防止链接的默认行为。这将获取 json 数据并使用动态生成的类名创建一些新链接。
我的第二个 ajax 调用是针对动态创建的链接上的单击事件。我无法阻止这个默认行为。它只是重定向到带有 json 数据的 url。在下面的代码中,它永远不会命中调试器。
我很确定这是因为新创建的链接不是 DOM 的一部分。
谁能帮我弄清楚发生了什么?
$(function(){
$("#load_projects").on("click", function(e){
$.ajax({
method: "GET",
url: this.href
}).done(function(response){
let $userProjects = $("#user_projects")
$userProjects.html("")
response.forEach(function(item){
let project = new Project(item);
let materials = project.materials
let url = `/users/${project.user_id}/projects/${project.id}`
$userProjects.append(`<div id=${project.id}>` + "<li>" + project.formatIntro() + "<br>" + "<a href="+url+" class='full_project'>See Full Project</a>" + "<br>" + "Materials Required:" + "<br>" + `<ul class=${project.id}></ul>` + "</li>" + "</div>")
materials.forEach(function(mat){
$(`.${project.id}`).append("<li>" + mat.material_name + "</li>")
});
});
});
e.preventDefault();
});
});
$(function(){
$(".full_project").on("click", function(e){
$.ajax({
method: "GET",
url: this.href
}).done(function(response){
response.forEach(function(item){
debugger
})
});
e.preventDefault();
});
});
解决方案
我想到了。在 DOM 中不存在的元素上调用了 click 事件。我需要将它绑定到身体上。
$(函数(){
$("body").on("click", ".full_project", function(e){
e.preventDefault();
$.ajax({
method: "GET",
url: this.href
}).done(function(response){
let project = new Project(response);
let $projectDiv = $(`#${project.id}`)
$projectDiv.html("")
});
});
});
推荐阅读
- html - 使图像响应。让它适合 div
- ionic-framework - 如何防止 Capacitor JS 中的本地通知打开应用程序?
- linux - 将数据从其他服务器(或节点)的子目录移动到当前服务器(节点)匹配的子目录的 shell 脚本
- kubernetes - PVC 和多个命名空间
- sql - SQL Oracle 中基于 7 天周期的总和值
- macos - 如何重新打开macOS“最近关闭”或“打开最近”菜单中列出的所有文件?
- python - 如何创建一个函数,该函数将列表作为输入并为每个高于 0.5 的值返回 1,如果低于 0.5,则返回 0?
- swift - 基于多个字符串分隔符拆分字符串的高效算法
- python - Pandas 将 jsonl 加载到具有复杂内部结构的数据帧中
- typescript - 使用 reduce 从对象数组创建强类型 TS 字典