2011-07-26 32 views
2

创建HTML表单,我有以下功能:如何在新窗口中

// open a new window. Create and submit form 
function createSubmitForm(response) { 
    var external = window.open('about:blank', 'external'); 
    var doc = external.document; 
    var body = $('body', doc); 

    // create a new form element 
    var form = $("<form id='authForm'></form>"); 
    // set the form's attributes and add to iframe 
    form.attr("action", response.action) 
     .attr("method", response.method); 
    form.appendTo(body); 

    // create form elements; 
    for (var i = 0, len = response.fields.length; i < len; i++) { 
     var field = response.fields[i]; 

     if (field.name != "") { 
      $("<input type='hidden'/>") 
       .attr("name", field.name) 
       .attr("value", field.value) 
       .appendTo(form); 
     } 
    } 
    // submit the form 
    form.submit(); 
} 

当我试着执行它时,我得到一个“未指定错误”form.appendTo(body)

我在这里做错了什么?

+0

你想做什么? – Mrchief

+0

我想打开一个新窗口,在该窗口内创建一个窗体,然后提交它。如果我使用与iFrame相同的方法,它就可以工作。 –

+0

尝试在新窗口上执行'document.write'。 – Mrchief

回答

1

试试这个:
请注意,您必须在服务器上的一个空白页http://localhost/some-blank-page-on-your-server.php

<!DOCTYPE html> 
<html> 
<head> 
<script class="jsbin" src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script> 
<meta charset=utf-8 /> 
<title>JS Bin</title> 
<!--[if IE]> 
    <script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script> 
<![endif]--> 
<style> 
    article, aside, figure, footer, header, hgroup, 
    menu, nav, section { display: block; } 
</style> 
</head> 
<body> 

</body> 
<script> 
(function($) { 
$(function() { 
    // open a new window. Create and submit form 
    function createSubmitForm(response) { 
     var external = window.open('http://localhost/some-blank-page-on-your-server.php', 'external'); 
setTimeout(function() { 
     var doc = external.document; 
     var body = $('body', doc); 

     // create a new form element 
     var form = $("<form id='authForm'></form>"); 
     // set the form's attributes and add to iframe 
     form.attr("action", response.action) 
      .attr("method", response.method); 


     // create form elements; 
     for (var i = 0, len = response.fields.length; i < len; i++) { 
      var field = response.fields[i]; 

      if (field.name !== "") { 
       $("<input type='text'/>") 
        .attr("name", field.name) 
        .attr("value", field.value) 
        .appendTo(form); 
      } 
      $("<input type='submit' value='submit' />").appendTo(form); 
     } 
     // submit the form 
     form.submit(); 

     body.append(form); 
}, 1000); 
    } 

    createSubmitForm({ 
     action: 'http://www.example.com', 
     method: 'get', 
     fields: [{ 
     name: 'field1', 
     value: 'some value' 
     }] 
    }); 
}); 
})(jQuery); 
</script> 
</html> 
+0

'body.append(form)'似乎没有改变任何东西。 –

+0

您的浏览器是否阻止弹出窗口? – czerasz

+0

好的,我看到了什么问题... – czerasz

0

尝试使用jquery定义的形式追加

$(形式).appendTo(主体)时;

+0

我已经这样做了:'var form = $(“

”);'。除非我没有正确理解你? –

+0

我不敢回应,因为一些用户如果你的错误会变得疯狂...但我的印象是,因为appendTo是一个jQuery的函数,该代码行必须以$ $(form).appendTo(body) ; 不是 form.appendTo(body); –

+0

不用担心......我不是那些用户之一。但是,我怀疑这会改变什么。 –

1

使用文件撰写。你在做的方式不适用于所有的浏览器。

+0

在这一刻,我只需要它在IE中工作。 IE是那些不起作用的浏览器之一吗? –

+0

是的,它绝对不会在IE中工作。 – ShankarSangoli

0

我会抛出一个警告(形式)之前的appendTo只是看看网页认为表单变量就在这一点上。

另一个帮助查明问题的方法是在firefox中加载firebug并使用它来调试问题。作为一个快速测试,我会摆脱camelcase,虽然我以前有过实例,即使它应该是camelcase,它只在全部小写的情况下才起作用。通常这是在IE中。愚蠢,但它是一个快速检查。