6

I want to call a Javascript function as well as issue a backend call at the moment a button is clicked.

This is my code right now :

<apex:commandButton value="Search" action="{!objectCollection}" style="margin-left:10px" reRender="source_search">
 <apex:param name="source" value="true"/>
 <apex:param name="target" value="false"/>
</apex:commandButton>

Is this possible?

6

Yes, you can.

You can use the onclick attribute like below.

<apex:commandButton value="Search" action="{!objectCollection}" 
  onclick="callJSFunc()" 
  style="margin-left:10px" reRender="source_search">
  <apex:param name="source" value="true"/>
  <apex:param name="target" value="false"/>
</apex:commandButton>

UPDATE

Based on your comments below, you want to call both JavaScript and Controller's function only if the input is valid. You can achieve this with following code:

<apex:commandButton value="Search" action="{!objectCollection}" 
  onclick="if(!isInputValid()){return false}else{callJSFunc()}" 
  style="margin-left:10px" reRender="source_search">
  <apex:param name="source" value="true"/>
  <apex:param name="target" value="false"/>
</apex:commandButton>

The idea is that the isInputValid() is also a JS function that will validate the input and return true if everything is valid, and false if the input is invalid. If the isInputValid() returns false, neither the controller's function, nor your JavaScript function in the else statement will get called.

  • Thanks! Another question. In this case, regardless of good/bad input when the button is clicked both the Action and onclick will execute, correct? Is there any way call the backend function in my controller via the javascript function? Because what I want to do is verify good input before I send it to the backend function – user2582622 Sep 1 '16 at 20:34
  • @user2582622 please, see my update. – smukov Sep 1 '16 at 21:50

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.