【问题标题】:Raise "onChange" event when Input Element changed by JavaScript from Popup Window当弹出窗口中的 JavaScript 更改输入元素时引发“onChange”事件
【发布时间】: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,但该问题的建议解决方案似乎对我不起作用。也许是因为弹出窗口。

【问题讨论】:

    标签: javascript jquery popup onchange


    【解决方案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');
    

    【讨论】:

    猜你喜欢
    • 2010-09-13
    • 2011-10-24
    • 2013-03-23
    • 2013-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多