在iframe中,我有以下脚本:
$("a").on("click", function (e) {
e.preventDefault();
if (e.target.href) {
let link = e.target.href;
$.ajax({
url: "/newOrigin",
data: {
"link": link
},
type: "POST",
success: function (response) {
parent.document.getElementById("oframe").srcdoc = response.site;
parent.document.getElementById("oLink").href = link;
},
error: function (error) {
console.log(error);
}
});
}
});
这不起作用。防止默认值不会执行其工作,这意味着事件本身不会被触发。我相信问题出在ajax成功函数的第二行,因为下面的代码工作得很好(srcdoc更改并记录了控制台)。
$("a").on("click", function (e) {
e.preventDefault();
if (e.target.href) {
let link = e.target.href;
$.ajax({
url: "/newOrigin",
data: {
"link": link
},
type: "POST",
success: function (response) {
parent.document.getElementById("oframe").srcdoc = response.site;
console.log("Hello");
},
error: function (error) {
console.log(error);
}
});
}
});
oLink是一个标记元素(超链接)的ID,oframe是该代码所在的iframe父级中另一个iframe的id。
有人知道为什么会这样吗?
编辑:该网站有两个iframe,每个iframe上方都有一个标题(每个标题都有在每个iframe中显示的页面的href)。在第一个iframe中单击链接时,随该链接发送一个ajax请求,并且响应中包含该页面的html,该html被发送并显示在第二个iframe中(成功功能的第一行)。现在,我想将第二个iframe上方的单词的href更改为第一个iframe中单击的链接的链接。因此,两个标题和两个iframe位于同一个父级组件(相同级别)中,而脚本位于第一个iframe中。
此处使用的html是base.html + index.html(index.html中的iframe和标题):https://github.com/MohamedMoustafaNUIG/AnnotatorVM/tree/master/app/templates
EDIT2:显然,成功函数与其余代码隔离,这意味着它无权访问“链接”变量。我通过返回响应中的链接并从那里访问它来解决了这个问题。但是事件仍然没有触发:(