当弹出窗口中的 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”事件的主要内容,如果未能解决你的问题,请参考以下文章