apex:commandbutton
Visualforce (Salesforce)の検証ピースを jQuery しようとしています。AJAX 呼び出しでない場合は正常に動作してoncomplete
います。つまり、ボタンのプロパティと再レンダリング プロパティを設定しない場合です。しかし、そうすると、type='button'
代わりに入力が行われ'submit'
ます。したがって、のアクション属性で指定したメソッドapex:commandbutton
は、検証結果 (true
またはfalse
) に関係なく呼び出されます。
そのために、次のオプションを試しましたが、何もうまくいきませんでした。
これは私が欲しいものです:
- フォーム フィールドに入力する
- コマンドボタンをクリックすると、jQueryを使用して検証する必要があります(現在、タイプが送信の場合は機能していますが、残念ながらAJAX呼び出しに変更すると
type='button'
機能しなくなります) - アクション メソッドを呼び出します
action="{!SaveUserAndSendEmail}"
(検証に合格すると、連絡先レコードが作成されます) Oncomplete="clickCreateUserButton();"
(これにより、アクション メソッドによって連絡先レコードが作成されると、ユーザー レコードが作成されます。
私が試したオプション:
- 方法 1 :
を。内部に次の JQuery スクリプトを追加しますdocument.ready()
。
j$('[id$=SaveUserAndSendEmail]').click(
function()
{
if (j$('[id$=theForm]').validate().form() == true)
{
isValid = true;
SetContinueProcess(true);
//callSaveUserAndSendEmailHidden();
//j$('[id$=SaveUserAndSendEmailHidden]').click();
return true;
}
else
{
isValid = false;
SetContinueProcess(false);
return false;
}
}
);
b. ご覧のとおり、actionsupport 関数を呼び出してプロパティ ContinueProcess を設定する setContinueProcess という関数を呼び出しました。false の場合、コントローラーのアクション メソッド内でアクションがブロックされます。
サーバー側に移動して検証メッセージをクリアするため、これは機能しませんでした。
- 方法 2 :
を。上記と同じ Jquery メソッド。唯一の変更点は、 setContinueProcess を呼び出す代わりに、別のボタンを作成して display:none を使用して非表示にし、上記の if 条件内で jquery と通常の javascript の両方を使用してクリックしようとしたことdocument.getelementbyid("buttonid").click()
です。これはアクション メソッドを呼び出し、連絡先レコードを作成しましたが、oncomplete メソッドは呼び出されませんでした。
- 方法 3 :
を。hiddenbutton の代わりに同じ Jquery メソッドが ActionSupport 関数を呼び出し、ボタンに対して行ったように、アクション属性と oncomplete 属性でそのアクション メソッドを指定しました。アクションメソッドだけを呼び出して、oncomplete メソッドを呼び出さなかったとしても
- 方法 4 :
を。同じjqueryメソッドは、アクションサポートでoncompleteメソッドを呼び出す代わりに、上記のif条件自体からアクションサポートメソッドとoncompleteメソッドの両方を呼び出しました:-
SaveandSend(); //Actionsupport method name which calls the controller's action method and creates the contact
CreateUser(); // Javascript method which clicks another button triggering the action method of that to create the user
この場合でも、2 番目のメソッドは呼び出されませんでした。
JavaScript コード:
function callSimulateUserSave() {
var mybtn = document.getElementById('{!$Component.theForm.SimulateUserSave}');
mybtn.click();
}
Visualforce コード:
<apex:actionFunction name="SetContinueProcess">
<apex:param name="ContinueProcess" value="ArgValue" assignTo="{!ContinueProcess}" />
</apex:actionFunction>
--commented -- <apex:actionFunction name="SaveandSend" action="{!SaveUserandSendEmail}" >
</apex:actionFunction> -- commented --
<apex:commandButton id="SaveUserAndSendEmail" value="Save and Send Activation Email" action="{!SaveUserandSendEmail}" rerender="junkpanel" oncomplete="if (j$('[id$=theForm]').validate().form() == true){callSimulateUserSave();}">
<apex:commandButton value="SimulateUserSave" id="SimulateUserSave" action="{!CreateUserRecord}" style="display:none;margin-left:5px;"/>
<apex:commandButton id="SaveUserAndSendEmailHidden" style="display:none;" value="Save and Send Activation Email" action="{!SaveUserandSendEmail}" rerender="junkpanel" oncomplete="callSimulateUserSave()" >
</apex:commandButton>
-- 一部のコードをコメントアウトした可能性があります。これらは、解決策を達成するために試みたさまざまな方法/アプローチで試したものです。