Loading
Salesforce から送信されるメールは、承認済ドメインからのみとなります続きを読む

Account Engagement プロスペクトのアクティビティに複数のフォーム送信が表示される

公開日: Sep 30, 2025
説明
プロスペクトのアクティビティに複数のフォーム送信が表示される場合がありますが、それらはほんの数分または数秒間隔のため、あまり意味がありません。
プロスペクトのアクティビティに複数のフォーム送信が表示される問題は、送信ボタンの複数回クリックが原因です。
JavaScriptを使用して送信ボタンを無効化するか、テキストを変更することで対策できます。
解決策

カスタムコードに追加できるオプションがいくつかあります。これはカスタム設定であるため、Account Engagement サポートチームは実装やトラブルシューティングを支援できないことにご注意ください


1.送信ボタンの無効化

デフォルトでは、送信ボタンを何度でもクリックできます。実際には、これにより複数回フォームが送信されたり、その他のイベントがトリガされたりする可能性があります。
 
この対策として、JavaScript を使用してボタンの disabled プロパティを trueに設定します。 
 
JavaScript が関連付けられていない単純なフォームの場合、次を使用できます。
<form method="POST" action="..." onsubmit="myButton.disabled = true; return true;"> ...<input type="submit" name="myButton" value="Submit"> </form>
 
 

2.ボタンのテキストの変更

ボタンを単に無効化する代わりに、混乱を招かないようにテキストを変更することもできます。たとえば、最初にボタンを無効化してから、表示ラベルを「Submit (送信)」から「Please wait... (お待ちください...)」に変更します。

フォームの送信時に実行されるコードには、次の内容が含まれます。
<script type="text/javascript"> function checkForm(form) // Submit button clicked { // // check form input values // form.myButton.disabled = true; form.myButton.value = "Please wait..."; return true; } function resetForm(form) // Reset button clicked { form.myButton.disabled = false; form.myButton.value = "Submit"; } </script>
 
一方、フォーム自体の HTML は次のようになります。
<form method="POST" action="..." onsubmit="return checkForm(this);"> ...<input type="submit" name="myButton" value="Submit"> <input type="button" value="Reset Button" onclick="resetForm(this.form);"> </form>


3.外部 JavaScript の使用

ここでは機能を変更せず、それを外部の JavaScript ファイルに移動できるように JavaScript を準備し、グローバル変数の必要性をなくします。
まず、HTML からイベントハンドラを取り除き、イベントリスナーを必要とする要素に id 値を割り当てます。
<form id="test_form" method="POST" action="..."> <p>First Name: <input type="text" size="32" required name="firstname"></p> <p>Last Name: <input type="text" size="32" required name="lastname"></p> <p><input type="submit" name="submit_button"> <input id="reset_button" type="button" value="Reset Button"></p> </form>
 
すべてのフォーム要素に id を割り当てる必要はありません。イベントハンドラーを使用している場合のみ、必要に応じて ID を含む FORM のみを使用できます。
 
次のステップでは、イベント処理関数を定義して割り当てます。ここでの主な違いは、各関数がイベントを表す変数 e を受け取ることです。これにより、 e.target を使用して対象となる要素を識別できます。
 
また、 return false; の代わりにフォーム検証スクリプトで e.preventDefault(); を使用します。これにより、フォームの送信を防止し、 return; でスクリプトを終了します。末尾に return true; は不要です。
 
最後に、すべてのコードを DOMContentLoaded 関数でラップして、変数をグローバルにすることなく変数を作成できるようにします。これにより、HTML が完全に読み込まれるまでスクリプトの初期化も遅延します。
<script type="text/javascript"> window.addEventListener("DOMContentLoaded", function(e) { var form_being_submitted = false; var checkForm = function(e) { var form = e.target; if(form_being_submitted) { alert("The form is being submitted, please wait a moment..."); form.submit_button.disabled = true; e.preventDefault(); return; } if(form.firstname.value == "") { alert("Please enter your First Name"); form.firstname.focus(); e.preventDefault(); return; } if(form.lastname.value == "") { alert("Please enter your Last Name"); form.lastname.focus(); e.preventDefault(); return; } form.submit_button.value = "Submitting form..."; form_being_submitted = true; }; var resetForm = function(e) { var form = e.target.form; form.submit_button.disabled = false; form.submit_button.value = "Submit"; form_being_submitted = false; }; document.getElementById("test_form").addEventListener("submit", checkForm, false); document.getElementById("reset_button").addEventListener("click", resetForm, false); }, false); </script>
 
JavaScript は、ページにインラインで含めることも、SCRIPT タグによって参照される別の JavaScript ファイルに含めることもできるようになりました。イベントリスナーがクロージャを作成し、含まれる関数はすべてローカル変数として定義されているため、ページ上の他のスクリプトが干渉されることはありません。
 
JavaScript をインラインで含める予定がある場合は、 DOMContentLoaded イベントハンドラーを使用する代わりに、次のように IIFE (Immediately Invokable Function Expression) を使用できます。
(function() { var form_being_submitted = false; var checkForm = function(e) { ...}; var resetForm = function(e) { ...}; document.getElementById("test_form").addEventListener("submit", checkForm, false); document.getElementById("reset_button").addEventListener("click", resetForm, false); })();
 
この場合、コードは FORM の後の任意の場所にインラインで配置する必要があります。通常はページの下部にある BODY タグを閉じる前に配置します。このコードを外部にすることはできません。そうすると、DOM がイベントハンドラーを割り当てる準備ができる前にこのコードが実行される可能性があります。
ナレッジ記事番号

000382956

 
読み込み中
Salesforce Help | Article