Я использую плагин Jquery-option-tree на отдельном веб-сайте, не основанном на WordPress, как в примере 7 на демонстрационной странице, за исключением того, что я не передаю файл .txt, но страница PHP генерирует массив < параметры> для передачи плагину.
http://kotowicz.net/jquery-option-tree/demo/demo.html
Это прекрасно работает: скажем, что пользователь хочет выбрать категорию для нового продукта, плагин подходит для цели, генерирующей приятное: «Еда -> фрукты -> яблоки» по клику пользователя. (см. демонстрационную страницу пример 7)
Что вместо этого, если продукт уже существует с назначенными ему категориями? Я хочу показать его пользователю, когда он редактирует этот продукт, предварительно загружая дерево.
У меня есть путь идентификатора, поступающий из базы данных, так что это просто вопрос запуска плагина без взаимодействия с пользователем, используя значение, которое я передаю. Я видел этот вопрос: JQuery имитировать событие нажатия на опцию выбора
и попытался смоделировать щелчок пользователя с помощью этого (и других) методов без удачи.
$('#select')
.val(value)
.trigger('click');
Вот вызов функции:
$(function() {
var options = {
empty_value: '',
set_value_on: 'each',
indexed: true, // the data in tree is indexed by values (ids), not by labels
on_each_change: '/js/jquery-option-tree/get-subtree.php', // this file will be called with 'id' parameter, JSON data must be returned
choose: function(level) {
return 'Choose level ' + level;
},
loading_image: '/js/jquery-option-tree/ajax-load.gif',
show_multiple: 10, // if true - will set the size to show all options
choose: ''
};
$.getJSON('/js/jquery-option-tree/get-subtree.php', function(tree) { // initialize the tree by loading the file first
$('input[name=parent_category_id]').optionTree(tree, options);
});
});
Здесь вы можете увидеть плагин:
Я не знаю этот плагин, но, глядя на примеры, кажется, что он соответствует вашим потребностям; Пример 6 — AJAX ленивая загрузка & значение настройки при каждом изменении уровня.
Теоретически для этого потребуются некоторые параметры конфигурации:
preselect: {'demo6': ['220','226']}, // array of default values - if on any level option value will be in this list, it will be selected
preselect_only_once: true, // prevent auto selecting whole branch when user maniputales one of branch levels
get_parent_value_if_empty: true,
attr: "id" // we'll use input id instead of name
Если это не соответствует вашим потребностям, вы можете начать его с события, например менять, KeyUp, и т.п.
$(document).on('change', '#select', function() {
$('#nextSelect').val($(this).val());
})
$(document).on('change', '#nextSelect', function() {
$('#finalInput').val($(this).val());
})
Да, вы правы, Маккан! Я видел эту опцию «preselect», но изначально я не мог использовать ее для переноса пути из базы данных в javascript, в результате я нашел решение «newbie», соответствующее синтаксису:
preselect: {'parent_category_id': [0,'2','22']},
PHP
$ category_path поступает из запроса к БД и имеет значение «0,2,76,140»
$path = explode(',', $category_path);
$preselect="";
foreach ($path as $value) {
$int = (int)$value;
if ($int != 0) $preselect.= "'". $int ."',";
else $preselect.= $int.","; // have to do this as ZERO in my case has to be without apostrophes ''
}
$preselect = "{'parent_category_id':[".$preselect."]}"
JS
var presel= <?php echo($preselect); ?>;
var options = {
preselect: (presel),
}
Любое предложение для лучшего кода?
Большое спасибо !!