提高;onChange";当JavaScript从弹出窗口更改输入元素时发生事件

提高;onChange";当JavaScript从弹出窗口更改输入元素时发生事件,javascript,jquery,popup,onchange,Javascript,Jquery,Popup,Onchange,我有一个带有表单元素和弹出窗口(由window.open打开)的网页 两者都有jQuery可用 弹出窗口有一个javascript,可以更改opener窗口中的表单元素。这样做非常有效 $(opener.document.formelement).val(vals[0]); 但是,这样做不会触发onChange事件。不过,其他一些页面元素也需要这样做。所以我试着用我自己来启动onChange事件 $(opener.document.formelement).change(); 但那没什么用

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

两者都有jQuery可用

弹出窗口有一个javascript,可以更改opener窗口中的表单元素。这样做非常有效

$(opener.document.formelement).val(vals[0]);
但是,这样做不会触发onChange事件。不过,其他一些页面元素也需要这样做。所以我试着用我自己来启动onChange事件

$(opener.document.formelement).change();
但那没什么用

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


这个问题类似于,但这个问题的建议解决方案似乎对我不起作用。可能是因为弹出窗口的缘故。

这一行应该可以工作:

$(opener.document.formelement).change();
根据jQuery,此行触发每个匹配元素的更改事件


如果它对您不起作用,那么您的代码中的某个地方就有问题。你能通过手动改变表单元素来触发onchange事件吗?

也许正是交叉窗口伤害了你。。。试着在你调用的开启器中创建一个函数。可能会有帮助吗

开场白:

window.changeMyElement = function(value) {
  $(formelement).val(value).change();
}
从弹出窗口:

opener.changeMyElement(value);
您还可以执行以下操作:

window.opener.document.getElementById('controlname').fireEvent('onchange');
或者在您的上下文中:

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

是的,我能。它可以完美地工作(尽管通常它应该是一个隐藏的元素)。但是,我怀疑由于安全原因,禁止从弹出窗口在“opener”中执行JavaScript。触发一个事件将执行JavaScript.opener.$(“…”).val(newval.change();请注意,这仅适用于IE,并且仅适用于9之前的版本: