Javascript document.form.submit不起作用

时间:2011-03-15 08:24:22

标签: javascript javascript-events

我使用JavaScript创建了一个表单并尝试提交它,但它显示错误消息document.payment为null。请帮助我

 var output_data = '<form   id ="payment" name="payment" method="POST" action="https://checkout.google.com/api/checkout/v2/checkoutForm/Merchant/922635804601464" accept-charset="utf-8">'
                                output_data += '<input type="hidden" name="item_name_1" value="Peanut Butter">';
                                output_data +='<input type="hidden" name="item_description_1" value="Chunky peanut butter.">';
                                output_data += '<input type="hidden" name="item_quantity_1" value="1">';
                                output_data += '<input type="hidden" name="item_price_1" value="3.99">';
                                output_data += '<input type="hidden" name="item_currency_1" value="USD">';
                                output_data += '<input type="hidden" name="ship_method_name_1" value="UPS Ground">';
                                output_data += '<input type="hidden" name="ship_method_price_1" value="10.99">';
                                output_data += '<input type="hidden" name="ship_method_currency_1" value="USD">';
                                output_data += '<input type="hidden" name="tax_rate" value="0.0875">';
                                output_data += '<input type="hidden" name="tax_us_state" value="NY">';
                                output_data += '<input type="hidden" name="_charset_">';
                                output_data += '</form>';
                                //alert(output_data);
                                //return false;
                                output_data += "<script>";
                                output_data += "document.getElementById('payment').submit();";
                                output_data += "</script>";                
                                document.write(output_data);    

6 个答案:

答案 0 :(得分:1)

尝试this

output_data += "<\/script>";    //notice how the script tag is closed

答案 1 :(得分:1)

当您尝试提交表单时,表单仍然不是文档的一部分。将行更改为:

output_data += "window.onload = function() { document.getElementById('payment').submit(); }; ";

编辑:另一个“脏”选项是使用计时器:

output_data += "window.setTimeout(function() { document.getElementById('payment').submit(); }, 500);";`

这将尝试提交半秒延迟。

编辑2:刚才看起来更深 - 你是以错误的方式做的 您需要使用AJAX来执行Checkout,使用jQuery AJAX变得非常简单易用 尝试一下,如果碰到墙壁,请告诉我们。 :)

我几乎可以肯定Google会公开允许跨域AJAX的jsonp服务,如果没有,那么您将不得不从服务器端代码执行此操作。

答案 2 :(得分:0)

更改

output_data += "document.payment.submit();";

output_data += "document.getElementById('payment').submit();";

然后它应该适合你。

答案 3 :(得分:0)

id ="payment" name="payment"

您可以参考

getElementById() 
getElementsByName()

如果它不起作用maby你的代码中有更多的元素名称与:

  

getElementById返回Element   其ID由elementId给出。如果不   这样的元素存在,返回null。   如果超过,则不定义行为   一个元素有此ID。

答案 4 :(得分:0)

试试这个:

var output_data = '<form   id ="payment" name="payment" method="POST" action="https://checkout.google.com/api/checkout/v2/checkoutForm/Merchant/922635804601464" accept-charset="utf-8">'
output_data += '<input type="hidden" name="item_name_1" value="Peanut Butter">';
output_data +='<input type="hidden" name="item_description_1" value="Chunky peanut butter.">';
output_data += '<input type="hidden" name="item_quantity_1" value="1">';
output_data += '<input type="hidden" name="item_price_1" value="3.99">';
output_data += '<input type="hidden" name="item_currency_1" value="USD">';
output_data += '<input type="hidden" name="ship_method_name_1" value="UPS Ground">';
output_data += '<input type="hidden" name="ship_method_price_1" value="10.99">';
output_data += '<input type="hidden" name="ship_method_currency_1" value="USD">';
output_data += '<input type="hidden" name="tax_rate" value="0.0875">';
output_data += '<input type="hidden" name="tax_us_state" value="NY">';
output_data += '<input type="hidden" name="_charset_">';
output_data += '</form>';
document.write(output_data);
document.getElementById('payment').submit();

答案 5 :(得分:0)

对于那些来这个页面寻找问题解决方案的人来说,问题是document.write。 您正在访问使用文档写入创建的表单,当时不可用。 (我在https(不是在http)和IE11中看到了更多的问题。

以下JavaScript解决方案适合我。使用createElement

创建表单
var oForm = document.createElement("FORM");

oForm.id = "taskslabelForm";
oForm.name = "taskslabelForm";
oForm.style.display = "none"; //You might not want to show the form
oForm.target="_self"; //Your target
oForm.method="POST";
oForm.action="YOUR-ACTION-HERE";

document.body.appendChild(oForm);
oForm.submit();
document.body.removeChild(oForm);