2017-03-02 73 views
0

我正在使用Drupal 7 Form Api構建帶select元素的自定義窗體。我附加了#ajax回調函數,它將觸發change事件。Drupal 7 #ajax更改事件可以防止同一元素上的其他更改事件處理程序

$form['landing']['country'] = array(
    '#type' => 'select', 
    '#options' => array(), 
    '#attributes' => array('class' => array('landing-country-list')), 
    '#validated' => TRUE, 
    '#prefix' => '<div id="landing-countries" class="hide">', 
    '#suffix' => '</div>',  
    '#title' => 'Select country', 
    '#ajax' => array(

     'wrapper' => 'landing-cities', 

     'callback' => 'get_cities', 

     'event' => 'change', 

     'effect' => 'none', 

     'method' => 'replace' 

    ),  
); 

但問題是,它阻止自定義更改功能在js中的相同選擇。在這個函數中,我想獲得選擇的選項值。因此,這不會引起火災:

$('body').on('change', 'select.landing-country-list', function() { 
    optval = $(this).find('option:selected').val(); 
}); 

這個代碼文件,其中包括我在$形式:

$form['#attached']['js'] = array(
    'https://code.jquery.com/jquery-2.2.4.min.js', 
    drupal_get_path('module', 'landing') . '/landing.js', 
); 

預先感謝您的幫助!

回答

1

如果你想發送Ajax之前,抓住你可以使用:

$(document).ajaxSend(function(){ 
    var val = $('select.landing-country-list').val(); 
}); 

否則,如果你想ajaxcallback後得到的值:

$(document).ajaxComplete(function(event, xhr , options) { 
      if(typeof options.extraData != 'undefined' && options.extraData['_triggering_element_name'] === 'country'){ 
// only on ajax event attached to country select 
       var val = $('select.landing-country-list').val(); 
      } 
    }); 
相關問題