Ссылки 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&f=home'>Public Home</name></content></item><root>"
Ответы
Ответ 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