How to prevent button to use validation function? I have a form with a submit type element and a button type element.

For the form I have a validation and a submit handler functions.

The validation should occur only when I click on the submit type button, but it is also getting used when I click on button type element.

How can I prevent button type element from using the validation function.

P.S.

I have used button type for #ajax.
You are looking for two Form API entries:
#ajax['prevent']:

Description: A JavaScript event to prevent when 'event' is triggered. Defaults to 'click' for #ajax on #type 'submit', 'button', and 'image_button'. Multiple events may be specified separated by spaces. For example, when binding #ajax behaviors to form buttons, pressing the ENTER key within a textfield triggers the 'click' event of the form's first submit button. Triggering Ajax in this situation leads to problems, like breaking autocomplete textfields. Because of that, Ajax behaviors are bound to the 'mousedown' event on form buttons by default. However, binding to 'mousedown' rather than 'click' means that it is possible to trigger a click by pressing the mouse, holding the mouse button down until the Ajax request is complete and the button is re-enabled, and then releasing the mouse button. For this case, 'prevent' can be set to 'click', so an additional event handler is bound to prevent such a click from triggering a non-Ajax form submission. This also prevents a textfield's ENTER press triggering a button's non-Ajax form submission behavior.
Values: String. Possible values: One or more jQuery events, with multiple events separated by space characters.

#limit_validation_errors:

Description: Provides an array of sections which are parts of $form_state['values'] which should be validated, implying that sections which are not listed should not be validated. This is normally used in multistep forms in the case of a &quot;back&quot; button, for example, where '#limit_validation_errors' =&gt; array() would mean not to validate anything as form values on the current page are to be discarded anyway. #limit_validation_errors does not have any effect if #submit is not set. More discussion is in the form_set_error() documentation.
Values: array indicating sections of the $form_state['values'] which should be validated.