【发布时间】:2012-06-12 11:55:45
【问题描述】:
我正在尝试对 visualforce (Salesforce) 中的 apex:commandbutton 进行 jQuery 验证。如果它不是 AJAX 调用,它工作正常,我的意思是如果不设置 oncomplete 并重新渲染按钮的属性。但如果我这样做,它会输入type='button' 而不是'submit'。因此,无论我的验证结果如何(true 或 false),我在 apex:commandbutton 的 action 属性中指定的任何方法都会被调用。
为此,我尝试了以下选项,但没有任何结果。
这就是我想要的:
- 填写表单字段
- 单击命令按钮时,它应该使用 jQuery 进行验证(到目前为止,如果它的类型是提交,它就可以工作,但不幸的是,如果我将其更改为 AJAX 调用,它会变成
type='button'并且不工作) - 调用我的操作方法
action="{!SaveUserAndSendEmail}"(如果验证通过创建联系人记录) -
Oncomplete="clickCreateUserButton();"(这将在通过操作方法创建联系人记录后创建用户记录。
我尝试过的选项:
- 方法一:
a. 在document.ready() 中添加以下 JQuery 脚本:
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 的函数,该函数调用 actionsupport 函数并设置属性 ContinueProcess,如果它为 false,则阻止控制器中 action 方法内的操作。 p>
这不起作用,因为它转到服务器端并清除验证消息。
- 方法二:
a. 与上述相同的 Jquery 方法。唯一的变化是,我没有调用 setContinueProcess,而是尝试使用另一个按钮并使用 display:none 将其隐藏,并尝试在使用 jquery 和普通 javascript document.getelementbyid("buttonid").click() 的条件下从上面单击它;
这调用了 action 方法并创建了联系人记录,但未调用 oncomplete 方法。
- 方法三:
a. 相同的 Jquery 方法,而不是 hiddenbutton,调用了一个 ActionSupport 函数,并在其操作属性和 oncomplete 属性中指定了它的操作方法,就像我为按钮所做的那样。甚至它只调用了action方法,没有调用oncomplete方法
- 方法四:
a. 相同的 jquery 方法,而不是在 actionsupport 中调用 oncomplete 方法,而是从上述 if 条件本身中调用了 action support 方法和 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
即使在这个中,第二个方法也没有被调用。
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>
-- 我可能已经注释掉了一些代码,这些是我尝试过的不同方法/方法的代码,我试图实现解决方案
【问题讨论】:
标签: jquery ajax validation salesforce visualforce