可以在父窗口中使用iframe的onSubmit吗?

时间:2016-01-06 09:23:49

标签: javascript c# jquery html iframe

是否可以在父窗口中调用iframe的onsubmit函数?我需要这个,因为我想检查iframe何时提交并将iframe文本框的某些值传递给父窗口中的文本框。

在父窗口中显示我的jQuery,而ExpDate是iframe中的文本框。

var expDate = $("#ExpirationDate").text();
$('#frmAdd').on('submit', function (e) {
    e.preventDefault();
    if (expDate != null && expDate != "") {;
        $('#ExpDate', window.parent.document).val(expDate);
    }
});

1 个答案:

答案 0 :(得分:1)

我在codepen上做了一个演示,因为SO片段是沙盒的:

http://codepen.io/VincentCharpentier/pen/KVWyeK

重要的部分:

// From the parent frame :
// 1. get the iframe with id "myFrame"
// 2. get the element with id "myForm" in this iframe (your form)
// 3. add an event handler
window.frames["myFrame"].contentWindow.document
      .getElementById("myForm")
      .onsubmit = function() { 
          alert("Submit !");
          // return false if you want to avoid redirection
          // return false;
      }

获得iframe的document对象后,您可以自由地对主document对象执行任何操作。

如果需要,您可以将.getElementById("myForm")替换为.getElementsByTagName("form")[0]

修改

当您询问如何访问iframe中的其他元素时,这里是:

在您的顶部框架中,您可以保留iframe窗口元素的引用:

// keep a reference to the window element of the iframe :
var winIFrame = window.frames["myFrame"].contentWindow;

使用此功能,您可以访问iframe中的任何DOM元素:

winIframe.document.getElementByID("SomeID")
winIframe.document.getElementsByTAgName("SomeTagName")
// ...

所以对于textarea你有两个选择:

1 - 如果textarea在表格内:

// add the event onsubmit handler
winIFrame.document.getElementById("myForm").onsubmit = function() { 
    // "this" refers to the form element
    // querySelector takes CSS selector as argument (like jQuery)
    // return the first element that match
    alert(this.querySelector("#ExpirationDate").value);
    return false;
}

2 - 如果您需要与表单外的内容进行互动,请使用winIFrame.document

// add the event onsubmit handler
winIFrame.document.getElementById("myForm").onsubmit = function() { 
    // "this" refers to the form element
    // querySelector takes CSS selector as argument (like jQuery)
    // return the first element that match
    alert(winIframe.document.getElementById("ExpirationDate").value);
    return false;
}

注意:我更新了codepen代码段