2016-04-15 58 views
0

我有下面的代码结构(嵌套HTMLS,虽然这可能没有太大的差别)访问HTML表单元素,没有ID内的iframe /名称

<html> 
    <body> 
     <iframe> 
      <html> 
       <form id="loginForm" name ="loginFormName"> 
        <input id ="name" name ="username"> 
        </input> 
       </form> 
      </html> 
     </iframe> 
    </body> 
</html 

我试了一下通过访问输入字段通过:

document.getElementById("name"); 
document.loginFormName.username; 

但我相信iFrame阻碍我访问元素。然而,不知何故首先访问的iFrame:

document.getElementByTagName("iframe).getElementById("name");

不会产生比“不确定”之外的任何结果。

非常感谢帮助,我想自动设置输入字段的值并自动提交表单。 (form.submit)。我对Javascript或JQuery没有偏好。

+0

的document.getElementById( “名”)。值(),因为你想获得从输入字段 –

+0

是的,我知道,我最终将需要.value的值试试这个。问题是我无法首先访问该对象。 – seulberg1

+0

由于您使用的是第三方iframe的来源,您可以发布您正在处理的确切代码吗? – garajo

回答

2

您可以使用.contents()

content()方法查找匹配元素(包括文本节点)内的所有子节点,或者如果元素是iframe,则查找内容文档。

$('iframe').contents().find('input') 

如果你想提交表单,您可以使用此。

$('iframe').contents().find('form').submit(); 

Fiddle demo展示如何在iframe内容是由contents()访问。

+0

你在控制台上运行过吗?一定要运行iframe后加载 –

+0

嗨@RinoRaj。 感谢您的演示和JQuery。在我的情况下,有多个输入字段,所以我首先想看看,如果查询返回任何内容: 'var counter = $('iframe')。contents()。find('input'); ' 但是 'counter.length' 显示为0? .length在这里不适用? 我会访问找到的第一个输入字段,然后通过: '$('iframe')。contents()。find('input')[0];?' – seulberg1

+0

我在网站上显示计数器作为element.innerHTML = counter.length iframe通过JS API加载,但我的代码位于页面的最底部,正好在之前。 – seulberg1

0

访问iframe的元素非常容易。

应使用以下语法访问输入元素&形式提交:

$('iframe').contents().find('input'); //Form Element access 

$('iframe').contents().find('#loginForm').submit(); //Form submit code 

希望它可以帮助解决您的查询!

0

如果您的iframe与您的父页面位于相同的域中,则可以使用document.frames集合访问元素。

给任何ID到iframe,并与您的iFrame ID替换myIFrame

window.frames [ 'myIFrame'。的document.getElementById( '名')

如果你的iframe是不是出于安全原因,浏览器应阻止此类访问的域相同。

0

问题是你正在加载你的iframe不正确。

<div class="main"> 
 
    <iframe src="iframecontent.html"> 
 
    </iframe> 
 
    </div> 
 

 

 
    <!--iframecontent.html :--> 
 

 
    <html> 
 
    <body> 
 
     <form id="loginForm" name ="loginFormName"> 
 
      <input id ="name" name ="username"> 
 
      </input> 
 
     </form> 
 
    </body> 
 
    </html>

+0

,然后执行'var counter = $('iframe')。contents()。find('input'); ' 并注销counter.length – garajo

+0

在我的示例中,我减少了太多的sytax的简单性。 iframe被称为exactely这种方式,但是,然后再次iFrame本身来自第三方API,因此我不能改变它的结构。 不幸的是,上面提到的JQuery不会产生任何东西。 – seulberg1