Я пытаюсь выполнить проверку jQuery для apex:commandbutton
в visualforce (Salesforce). Он отлично работает, если это не вызов AJAX, я имею в виду, если не установить свойства oncomplete
и перерисовки для кнопки. Но если я это сделаю, он сделает ввод type='button'
вместо 'submit'
. Таким образом, любой метод, который я указал в атрибуте действия apex:commandbutton
, вызывается независимо от моего результата проверки (true
или false
).
Для этого я попробовал следующие варианты, и ничего не получилось.
Это то, что я хочу:
- Заполните поля формы
- При нажатии кнопки команды он должен проверить с помощью jQuery (на данный момент он работает, если его тип — submit, но, к сожалению, если я изменю его на вызов 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. Как видите, я вызвал функцию с именем setContinueProcess, которая вызывает функцию поддержки действий и устанавливает свойство ContinueProcess, и если оно ложно, я блокирую действие внутри метода действия в контроллере.
Это не сработало, потому что оно переходит на сторону сервера и очищает сообщения проверки.
- Метод 2:
а. Тот же метод JQuery, что и указанный выше. Единственное изменение заключается в том, что вместо вызова setContinueProcess я попытался использовать другую кнопку и скрыл ее, используя display:none, и попытался щелкнуть ее из приведенного выше условия, если используется как jquery, так и обычный javascript document.getelementbyid("buttonid").click()
; это вызвало метод действия и создало запись контакта, но метод oncomplete не был вызван.
- Способ 3:
a. Тот же метод Jquery вместо hiddenbutton вызывал функцию ActionSupport и указывал метод действия в атрибуте действия и атрибуте oncomplete, как я сделал для кнопки. Даже он вызывал только метод действия и не вызывал метод oncomplete
- Метод 4:
a. Тот же метод jquery, вместо вызова метода oncomplete в actionsupport, вызывал как метод поддержки действий, так и метод oncomplete из приведенного выше условия if :-
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
даже в этом случае второй метод не вызывался.
Код 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>
-- Возможно, я прокомментировал некоторый код, это те, которые я пробовал для разных методов/подходов, которые я пытался найти для решения