Подтвердить что ты не робот

Ссылки JS Tree неактивны

Я новичок в JQuery и JS Tree, но учась любить его. Я установил с помощью php, созданного xml (см. код ниже). Он работает как с одним исключением - ссылки неактивны.

Я знаю, что есть что-то основное, чего я не понимаю. Короче говоря, я просто хотите, чтобы ссылки функционировали как обычные ссылки. В долгосрочной перспективе я хочу, чтобы они вызвать вызов ajax, который перезагрузит конкретный div на странице.

Может ли кто-нибудь указать мне в правильном направлении? Большое спасибо за помощь!

$(function () {
        $("#mainMenu").jstree({
                xml_data : { data : <?php $menu->deliver(); ?> },
                core : { animation : 1000 }
                ui : { select_limit : 1, selected_parent_close : false },
                themes : { theme : "default", dots : true, icons : false },
                types : { types : { "heading" : { select_node : true } } },
                plugins : [ "themes", "xml_data", "ui", "types" ]
        });
});

Пример xml (отдельный элемент):

"<root><item id='pubPages_home' parent_id='0'><content><name href='?
a=pubPages&amp;f=home'>Public Home</name></content></item><root>"
4b9b3361

Ответ 1

            .bind("select_node.jstree", function (e, data) {
                var href = data.node.a_attr.href
                document.location.href = href;
            }) ;

версия jstree: "3.0.0", jquery: last

обновление: или лучший способ для меня:

.bind("select_node.jstree", function (e, data) {
  $('#jstree').jstree('save_state');
 }) ;

.on("activate_node.jstree", function(e,data){
   window.location.href = data.node.a_attr.href;
 })

Ответ 2

Я знаю, что это старо, но я пришел сюда, чтобы найти быстрое решение. Lubor Bílek в основном правилен, но имейте в виду, что jsTree свяжет родительский элемент <li> щелкнутого элемента привязки.

Я решил это, выполнив:

.bind('select_node.jstree', function(e,data) { 
    window.location.href = data.rslt.obj.find('a').attr("href"); 
});

Таким образом, событие будет привязываться к дочернему элементу <a> <li> вместо самого <li>, так что вы можете иметь атрибут href на своих якорях вместо ваших элементов списка.

Ответ 3

Я думаю, вам нужно явно написать обработчик кликов для связей дерева node. JsTree принимает событие click для себя и не позволяет ему перейти на страницу перенаправления.

Я бы попытался пойти следующим образом:

$('#mainMenu').bind('select_node.jstree', function(e,data) { 
    window.location.href = data.rslt.obj.attr("href"); 
});

Ответ 4

Я решил прямо сейчас эту проблему с небольшой грубой силой

<li id="child_node_1"><span onClick="javascript:window.location.href='your_page.html'" title="Lassie come home!">your text here</span></li>

приятно и легко.

Ответ 5

Попробуйте следующее:

jQuery("#mytree ul").on("click","li.jstree-node a",function(){
    document.location.href = this; 
});

Благодаря jQuery событие делегирование, это событие будет делегировать <a> elemets. если вы не используете делегирование событий, он будет срабатывать только в первый раз, когда вы нажимаете каждый якорь.

Ответ 6

Обычно нам нужно контролировать действие "Контейнерных узлов" и "Детских узлов" вместе.

Итак, мы можем сделать что-то вроде:

$("#jstree-div").jstree().delegate("a","click", function(e) {
            if ($("#jstree-div").jstree("is_leaf", this)) {
                document.location.href = this;
            }
            else {
                $("#jstree-div").jstree("toggle_node", this);
            }
        });

"is_leaf" - это одна из функций jsTree, которая проверяет, нет ли у node дочерних элементов.

Ответ 7

Я нахожу простой способ.

$('#'+target).jstree({ 'core' : {
    'data' : treeInfo
} });

$(".jstree-anchor").click(function()
{
    document.location.href = this; 
});

Я обнаружил, что jstree использовал класс jstree-anchor для списков li. Таким образом, я могу найти ссылку href из этого объекта, я могу сделать эту ссылку без каких-либо ограничивающих функций.

Ответ 8

Я пробую этот код:

window.location.href = data.rslt.obj.find('a').attr("href");

Он вызывает ошибку data.rslt undefined, поэтому я не могу получить href с ней!

вот мой доступный код:

$("#mytree").bind("select_node.jstree", function(e, data) {
  window.location.href = data.node.a_attr.href;
});

Связано ли с версией jstree? Моя версия jstree: 3.0.0-bata10