2016-09-01 6 views
6

Javascriptを使用して送信する場合、デフォルトのHTML検証を維持することは可能ですか?JavaScriptを使用して送信する場合、ブラウザのHTMLフォームの検証を維持しますか?

document.getElementById("mc-embedded-subscribe-form").submit(); 

がどのように私は、ブラウザによってスローdefualtエラーメッセージを保持します:私は何を意味

は、私が使用してフォームを送信した場合、このメソッドをJS、ということでしょうか?私はこれを使用していると考え

enter image description here

つの回避策:

<form onSubmit="return somefunction()"> 

しかし、APIが閉鎖関数内の成功を返すので、私はこの方法を使用することはできません

+0

「エラーメッセージを保存する」とはどういう意味ですか?希望の効果は何ですか? – Whothehellisthat

+0

@Whaughhellist彼は彼らがまだ出演/働きたがっていると思います。 –

+0

クロージャー関数内で結果を返すのはどのAPIですか?そして、それは 'onsubmit'イベントハンドラの中から結果を判断できないのですか? 'onsubmit'イベントハンドラ内からAPIを使うだけではいけません。 –

答えて

2

私の理解によれば、html検証では提出を停止するには十分ではありません。提出する前にjavascriptで必要な入力を検証する必要があります。

例えば

if (!empty(username)) { 
    document.getElementById("mc-embedded-subscribe-form").submit(); 
} 
+0

これは私のフォールバック計画です。私はHTML検証を維持する方法を見つけようとしていましたが、もしできなければ、これはしなければならないかもしれません。入力いただきありがとうございます! :) –

2

HTML5はまた、あなたが彼らの検証ステータスに関してのフォーム/要素と対話するために使用することができますJSのAPIを指定している:https://www.w3.org/TR/html5/forms.html#the-constraint-validation-api

だから、これを達成する最も簡単な方法は次のようになりあなたのフォームのcheckValidityメソッドを呼び出し、これが真を返すときにのみそれを送信してください。

このような何か:

function submitIfValid() { 
    var form = document.getElementById("mc-embedded-subscribe-form"); 
    if(form.checkValidity()) { 
    form.submit(); 
    } 
    else { 
    // 
    } 
} 

を、あなたがフォームの送信をトリガしたい場合、あなたはちょうどその関数を呼び出します。

0

form.submit()を使用する必要はありません。正しく実行するか(onsubmit)、送信ボタンでclick()を使用してください。

適切にそれをやって...

私が自動的に表示フォームを送信するために十分な理由を考えることはできません。ユーザー対話なしでデータを送信するには、XMLHttpRequestまたはWebSocketsを使用します。

ユーザーインタラクション(フォームの送信ボタンなど)によってフォームが送信されるため、フォームを送信するためにJavaScriptを使用する必要はありません。 onsubmitイベントハンドラでfalseを返すことにより、JavaScriptがprevent a form submissionになる可能性が高くなります。

...またはclick()

プログラム的するinvoke HTML5の検証(およびフォームに添付また、任意のJavaScript onsubmitイベントハンドラ)を使用して、フォームに属して送信ボタンのclick()関数を呼び出すことができます。

フォームには送信ボタンをしている場合、あなたは一時的なものを作成することはできません:サーバーは、ユーザーがクリックしたボタンを検出できるように、複数持つ

var form = document.getElementById("mc-embedded-subscribe-form"); 
var button = document.createElement('input'); 
button.type = 'submit'; 
button.style.display = 'none'; 
form.appendChild(button); 
button.click(); 

フォームは、各name属性を持っている必要があり、ボタンを提出します。 form.buttonName.click()を使用してこれらのボタンを「クリック」することができます。

関連する問題