Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 将事件绑定到iframe';s内容并从iframe触发它_Jquery_Html_Events_Dom_Iframe - Fatal编程技术网

Jquery 将事件绑定到iframe';s内容并从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处绑定

我已经从我们当前的项目中分离出了非常奇怪的bug:

(演示)和

做:

1) 在第一次输入时单击并选择任意日期

您将看到-“在iframe中更改了日期选择器!”

2) 在第二个输入处单击,写出一些符号,然后在页面上的任意空白处按

您将看到-“iframe内部的常规输入已更改!”+“iframe外部的常规输入已更改!”

iframe内部:

<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()
返回的内容……它很有效!请粘贴它作为答案!