[英]How to reliably submit an HTML form with JavaScript?
有沒有辦法使用JavaScript保證在所有情況下都可以使用?
我詳細說明。 常見的方法似乎是:
formElement.submit()
這一切都很好,除了一件事。 表單的字段可用作formElement
屬性,因此如果存在名稱或標識為 “text1”的字段,則可以將其作為formElement.text1
進行訪問。
這意味着如果一個元素被稱為“submit”(無論是它的名字還是它的id ),那么formElement.submit()
將不起作用。 這是因為formElement.submit
不是表單的方法,而是具有該名稱的字段。 不幸的是,提交按鈕具有“提交”名稱或ID是相當普遍的。
兩個例子來說明我的觀點。 首先,以下內容不起作用,因為表單的元素名稱為“submit”:
<form name="example" id="example" action="/">
<button type="button" name="submit" onclick="document.example.submit(); return false;">Submit</button>
</form>
以下將工作。 唯一的區別是我從表單中刪除了名稱“submit”:
<form name="example" id="example" action="/">
<button type="button" onclick="document.example.submit(); return false;">Submit</button>
</form>
那么,還有其他方法可以使用JavaScript提交HTML表單嗎?
在JavaScript中創建另一個表單,並在原始表單上應用其submit()
方法:
<html>
<script>
function hack() {
var form = document.createElement("form");
var myForm = document.example;
form.submit.apply(myForm);
}
</script>
<form name="example" id="example" method="get" action="">
<input type="hidden" value="43" name="hid">
<button
type="button"
name="submit"
onclick="hack();return false;"
>Submit</button>
</form>
</html>
form.submit
是對一個全新的干凈提交方法的引用,然后使用apply(myForm)
以原始形式執行它。
那么,還有其他方法可以使用JavaScript提交HTML表單嗎?
更新 :接受Jerome的建議(在此主題的其他地方)。 我將這個答案留給歷史興趣,但它不如傑羅姆的解決方案那么好或可靠。
以下方法很難看,但有效。
var x = document.forms.example;
var f = document.createElement('form');
f.action = x.action;
f.method = x.method;
f.enctype = x.enctype;
for (var i = 0; i < x.elements.length; i++) {
var el = x.elements[i];
if (el.name !== "submit") {
f.appendChild(el);
}
}
x.parentNode.replaceChild(f,x);
f.submit();
在Firefox中
formElement.constructor
返回“HTMLFormElement”。 因此,您可以使用以下方式提交表單:
HTMLFormElement.prototype.submit.call(formElement)
您也可以將其擴展到其他瀏覽器:
formElement.constructor.prototype.submit.call(formElement)
最好的想法是不要將提交按鈕命名為“提交”,但你可以繞過它 -
function reallysubmitform(n){
n= n || 0;
var f= document.forms[n];
f.onsubmit= function(){
return true
};
var sub= f.elements['submit'];
if(sub && sub.type== 'submit') sub.click();
else f.submit();
}
reallysubmitform()
對於名為submit的表單,只需調用其按鈕,單擊功能對我有效。
document.forms[0].submit.click(); //where submit here is just the name of the button/input tied to the form.
使用JavaScript提交表單在設計上是不安全的 。
您的用戶可以在手機上瀏覽您的網站,禁用JavaScript,調整頁面來源或使用Lynx 。
在任何情況下,出於可訪問性目的,您將需要良好的舊HTML提交按鈕和服務器端的一些輸入檢查。
只需使用onsubmit ...
<form name="example" id="example" action="/" onsubmit="document.example.submit();">
<button type="submit" name="submit" onclick="document.example.submit(); return false;">Submit</button>
</form>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.