2011-07-26 64 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中。愚蠢,但它是一個快速檢查。