当弹出窗口中的 JavaScript 更改输入元素时引发“onChange”事件

Posted

技术标签:

【中文标题】当弹出窗口中的 JavaScript 更改输入元素时引发“onChange”事件【英文标题】:Raise "onChange" event when Input Element changed by JavaScript from Popup Window 【发布时间】:2009-05-12 22:51:06 【问题描述】:

我有一个带有表单元素和弹出窗口(由 window.open 打开)的网页。

两者都有 jQuery 可用。

弹出窗口有一个javascript,可以改变打开窗口中的表单元素。这样做可以完美地工作...

$(opener.document.formelement).val(vals[0]);

但是,这样做不会触发 onChange 事件。但是,其他一些页面元素会要求这样做。所以我尝试自己触发 onChange 事件

$(opener.document.formelement).change();

但这并没有任何作用。

有什么提示吗?由于其他页面元素的体系结构,我绝对必须触发 onChange 事件。

这个问题类似于Call Javascript onchange event by programatically changing textbox value,但该问题的建议解决方案似乎对我不起作用。也许是因为弹出窗口。

【问题讨论】:

【参考方案1】:

也许它是伤害你的跨窗口......尝试在你调用的 opener 内部创建一个函数。有帮助吗?

在开瓶器中:

window.changeMyElement = function(value) 
  $(formelement).val(value).change();

来自弹出窗口:

opener.changeMyElement(value);

【讨论】:

opener.$('...').val(newval).change();【参考方案2】:

这条线应该可以工作:

$(opener.document.formelement).change();

根据jQuerydocumentation这行触发每个匹配元素的change事件。

如果它不适合您,那么您的代码中的某个地方就有问题。可以通过手动更改表单元素来触发onchange事件吗?

【讨论】:

是的,我可以。它完美地工作(虽然通常它应该是一个隐藏的元素)。但是我怀疑出于安全原因,禁止在弹出窗口的“开启器”中执行 JavaScript。触发事件会执行 JavaScript。【参考方案3】:

你也可以这样做:

window.opener.document.getElementById('controlname').fireEvent('onchange');

或者在你的上下文中:

$(opener.document.formelement).fireEvent('onchange');

【讨论】:

请注意,这实际上只对 IE 有用,并且仅适用于 9 之前的版本:help.dottoro.com/ljvtddtm.php

以上是关于当弹出窗口中的 JavaScript 更改输入元素时引发“onChange”事件的主要内容,如果未能解决你的问题,请参考以下文章

当弹出框被解除时,保持 UITextView 中的文本突出显示

jquery popup中的事件被多次触发

弹出窗口出现时如何阻止标签栏项目变灰

我想在主窗口上制作一个弹出窗口

检测用户是不是点击了弹出窗口中的元素

PopupWindow上面的虚拟键盘