Ajax событие к не Drupal Form элементам

Аватар пользователя divined divined 5 октября 2012 в 12:34

Стояла задача добавить ajax событие на элемент формы созданный не Друпалом. В моем случае это оказался "Path" от элемента SVG, созданного библиотекой Raphael. Т.е. кусочек интерактивной карты.

Решение:

1. Создаем элемент на форме, который будет выполнять функции ajax элемента:

<?php
        $form
['tid'] = array(
        
'#type' => 'textfield',
        
'#default_value' => '',
        
'#ajax' => array (
            
'callback' => 'mapsearch_cities',
            
'wrapper' => 'cities',
            
'event' => 'hs_changed',
        ),
    );
?>

2. В JS коде генерации неДрупал элемента(карты Raphael), присваиваем этому элементу событие mousedown, это можно сделать как минимум 5 способами, смотрите документацию jquery или в моем случае библиотеки Raphael.

В этом событии нам нужно сделать 2 вещи:

- $('#edit-tid').val(paths[arr[this.id]].tid); //Изменить значение у элемента
- $('#edit-tid').trigger('hs_changed'); //Запустить выполнение ajax события

3. Обрабатываем callback как и у других ajax элементов.

Просто и элегантно. Другие подобные варианты реализации этого описанные в рунете сводились к переписыванию в свой JS половины друпаловского misc/ajax.js, да и к тому же генерацию кучи дополнительных параметров в POST запрос.

Если есть другие решения, делитесь, не жмоттесь )