Добрый день.
Подскажите, пожалуйста, можно ли вызвать JS-функцию из модуля Drupal?
Пример ниже.
В модуле Drupal прописано:
<?php
/**
* Реализация hook_init()
*/
function mymodule_init() {
drupal_add_js(drupal_get_path('module', 'mymodule') . '/js/script.js');
}
?>
В файле script.js например так:
function myjsfunc_1() {
console.log('run myjsfunc_1');
}
console.log('run myjsfunc_1');
}
Или так:
jQuery.fn.myjsfunc_2 = function() {
console.log('run myjsfunc_2');
};
console.log('run myjsfunc_2');
};
Можно ли вызвать JS-функцию из hook_form?
<?php
function my_form($form, &$form_state) {
// Можно ли здесь вызвать JS-функцию???
return $form;
}
?>
Комментарии
Возможно, можно воспользоваться функцией ajax_command_invoke(NULL, 'myjsfunc_2', array());
http://www.drupaler.by/lessons/sozdaem-polzovatelskuyu-ajax-komandu
Прикольно, но не совсем то что мне нужно. Здесь мы вызываем функцию в каком-то callback'е. Проблема в том что у меня на элемент формы уже навешен другой callback и мне хотелось бы вызвать функцию именно в hook_form. Судя по статье, мне проще было бы написать callback с использованием ajax_command_invoke().
Ну, во первых, это не hook_form. Это просто процедура для формирования формы.
Во-вторых, очень вероятно, что Вам вообще не нужны AJAX-команды, достаточно просто модифицировать форму (а то и вовсе, обойтись только JS-скриптом).
И в-третьих, Вам нужно просто написать на листочке алгоритм, который Вы хотите реализовать. Опишите все что должно происходить, обоснуйте каждый пункт подходя к нему с критикой и Вам должна нарисоваться картина нужной реализации.
Спасибо за ответ. Решил обойтись только JS-скриптом.
Решил следующим образом:
var selector = 'select';
var elements = [];
jQuery(selector + ' option').each(function () {
var elem = jQuery(this).val();
elements.push(elem);
});
var max = Math.max.apply(Math, elements);
jQuery(selector).val(max);
jQuery(document).unbind('ajaxSuccess', selectedMaxOption);
}
function eventChangeInput() {
var selector = 'input';
jQuery(selector).live('change', function () {
jQuery(document).bind('ajaxSuccess', selectedMaxOption);
});
});
}
jQuery(document).ready(function () {
eventChangeInput();
});
Посмотрите стандарты кодирования js drupal. Нужно оформить код по стандартам и через бихейвиоры, иначе рано или поздно он сломает другой код в другом месте. Постоянно с таким сталкиваюсь
Ага, спасибо. Это оно?