Jquery 将事件绑定到iframe';s内容并从iframe触发它
我已经从我们当前的项目中分离出了非常奇怪的bug: (演示)和 做: 1) 在第一次输入时单击并选择任意日期 您将看到-“在iframe中更改了日期选择器!” 2) 在第二个输入处单击,写出一些符号,然后在页面上的任意空白处按 您将看到-“iframe内部的常规输入已更改!”+“iframe外部的常规输入已更改!” iframe内部:Jquery 将事件绑定到iframe';s内容并从iframe触发它,jquery,html,events,dom,iframe,Jquery,Html,Events,Dom,Iframe,我已经从我们当前的项目中分离出了非常奇怪的bug: (演示)和 做: 1) 在第一次输入时单击并选择任意日期 您将看到-“在iframe中更改了日期选择器!” 2) 在第二个输入处单击,写出一些符号,然后在页面上的任意空白处按 您将看到-“iframe内部的常规输入已更改!”+“iframe外部的常规输入已更改!” iframe内部: <input id="datepicker" /> <input id="usual_input" /> 在iframe.html处绑定
<input id="datepicker" /> <input id="usual_input" />
在iframe.html处绑定到此输入处的更改事件:
$(this).contents().find("#datepicker").change(... (1)
$(this).contents().find("#usual_input").change(... (2)
$("#datepicker").change(... (3)
$("#usual_input").change(... (4)
但是№1不要在任何浏览器中工作
jquery ui的日期选择器100%正确地触发更改事件。为什么我们不能在iframe之外绑定它?非常有趣的结论: 有两个jquery对象:main_$和iframe_$ 主控制器可以控制iframe_$ iframe_U$无法控制主_$ iframe_U$无法将事件触发到main_$ main_$(iframe).contents().find(“元素”).bind(“事件”);不起作用 只有standart(输入、选择和文本区域)通过浏览器发送的事件可以在任何地方捕获 JCOC611找到的最佳解决方案是用iframe临时替换main_u$_$
var main_$ = $;
$ = $(iframe).get(0).contentWindow.$;
//many logick which works perfectly without iframes
$ = current_$;
当然,您可以单独使用main_$和iframe_$
PS
不记得世界上最糟糕的浏览器——ie中非常古老的jquery错误
$("...").find("iframe").ready(
function() {
//this == iframe.contentDocument
this.contentWindow == undefined;
}
);
仅通过特定路径获取iframe的窗口
$("...").find("iframe").get(0).contentWindow
而且它可以跨浏览器工作!:3您可以通过以下方式访问iframe的窗口元素:
$(this)[0].contentWindow.$("#datepicker")
或者这也可能奏效:
this.contentWindow.$("#datepicker");
我希望这能有所帮助。
$(这个).contentWindow.$(“#日期选择器”)…
而且对于通常的输入来说,它根本不起作用。jquery contents()正确选择dom元素。这里没有虫子。bug在事件中我的意思是$(这个)[0]。contentWindow.$(“#datepicker”)
,请尝试一下,因为它返回的内容不等于.find()
返回的内容……它很有效!请粘贴它作为答案!