【发布时间】:2011-05-10 06:41:34
【问题描述】:
在我的 ASP.NET 应用程序中,我使用 MasterPage 和 iFrame 作为应用程序的内容部分(iFrame 之外还有一个侧边栏和菜单栏)。
我的目标是插入一个 jQuery/javascript 函数来拦截 <select> 元素在子 iFrame 中获得焦点。
MasterPage 和 iFrame 都是同一个应用程序的一部分,iFrame 不打开外部页面,而是打开应用程序的 .aspx 页面,因此是同一个域。
但无论如何,“焦点”事件似乎不起作用,因为内部代码没有执行。
函数如下:
$("#tabFrame").load(function() {
$("#tabFrame").contents().find("SELECT").focus(function() {
alert('focus on');
}).change(function() {
$.ajax({
type: "POST",
url: "../WebService/registerChanges",
dataType: "json",
contentType: "application/json; charset=utf-8",
data: JSON.stringify({
controlName: dropDownId
}),
success: function(data) {
var result = JSON.parse(data.d);
if (result.Success) {
alert("Successfully found.");
}
}
})
})
})
由于函数本身是正确的,我想尝试从外部访问内部 IFrame 存在一些问题,但我不知道是哪些问题。
有什么建议吗? (我用IE8作为浏览器)
谢谢。
【问题讨论】:
-
您是否确认 $("#tabFrame").load(...) 正在触发?
-
因为您在 $("#tabFrame").load(..) 中,可能 $("#tabFrame") 不匹配任何内容 - 尝试更改 $("#tabFrame" ).contents().find("select") 到 $("select")
-
为了验证 iframe 是否被触发,我在 $("#tabFrame").load() 函数之后放置了一个简单的警报。一开始我只是使用 $("select"),但即使那样它也不起作用
-
尝试运行它来告诉你内部选择是否匹配任何 dom 元素: $("#tabFrame").load(function() { alert($("#tabFrame").contents( ).find("SELECT").length); });