drupaldrupal-7drupal-ajax

check a condition before a ajax call back of form in drupal 7


I have written ajax callback on a textfield and it is called on blur event.

But before It going for ajax callback I want to check a condition that textfield not empty.

So I want,If textfield is not empty then the ajax callback is get called otherwise it should not get called.

Thanks in advance

form_example is my module name

Form control

$form['price_form']['item'] = array(
    '#type' => 'textfield',
    '#title' => 'Item Name?',
    '#size' => 10,
    '#maxlength' => 25,
    '#id' => 'nameId',
    '#required' => TRUE,
    '#ajax' => array(
        // #ajax has two required keys: callback and wrapper.
        // 'callback' is a function that will be called when this element changes.
        'callback' => 'form_example_simplest_callback',
        'wrapper' => 'listDiv',
        'effect' => 'fade',
    ),
    '#autocomplete_path' => 'examples/form_example/item_name_autocomplete_callback',
);

JS Code

(function($){
    $(document).ready(function(){
        alert('Hi, Javascript successfully attached');

        Drupal.behaviors.form_example = {
            attach: function (context, settings) {

                // Overwrite beforeSubmit
                Drupal.ajax['nameId'].options.beforeSubmit = function (form_values, element, options) {
                    alert('dsf');
                }
            }
        };
    });
})(jQuery);

I am printing alert for testing.I tried by its name and by its id but not getting alert.I got below alert so js inclusion fine.

alert('Hi, Javascript successfully attached');

Solution

  • The ajax implementation in the form api lets you specify a 'beforeSubmit' handler that will be run before submission. According to this : http://malsup.com/jquery/form/#options-object if that function returns false the form won't be submitted.

    You should be able to add a beforesubmit handler something like:

    Drupal.behaviors.MyModule = {
      attach: function (context, settings) {
    
        // Overwrite beforeSubmit
        Drupal.ajax['your_element'].options.beforeSubmit = function (form_values, element, options) {
            // check the textfield isn't blank then return false;
        }
      }
    };