Как предварительно загрузить & lt; options & gt; и & lt; выберите & gt; с плагином JQuery-опция-дерево

Я использую плагин 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);
});
});

Здесь вы можете увидеть плагин:

https://code.google.com/p/jquery-option-tree/

1

Решение

Я не знаю этот плагин, но, глядя на примеры, кажется, что он соответствует вашим потребностям; Пример 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());
})
0

Другие решения

Да, вы правы, Маккан! Я видел эту опцию «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),
}

Любое предложение для лучшего кода?
Большое спасибо !!

0

По вопросам рекламы [email protected]