在新的jstree

时间:2015-12-15 15:58:00

标签: javascript jquery html jstree

我有一个点击事件,只允许锚标签双击时才能工作。当锚标记位于原始树中但在将树中的文件复制到另一个树之后,这种方法可以正常工作,但事件不会触发,只需单击即可使锚标记工作。有人知道这个的原因吗?锚标记在新树中完全相同。我的代码如下:

$('.tree-link').click(function(){
    return false;
}).dblclick(function() {
    window.location = this.href;
    return false;
});

复制前的原始锚标记(触发事件):

<a class="jstree-anchor  tree-link" href="#settings.html"><i class="jstree-icon jstree-themeicon fa fa-briefcase icon-state-success  jstree-themeicon-custom"></i>test</a>

新树中复制的锚标记(不触发事件):

<a class="jstree-anchor  tree-link" href="#settings.html"><i class="jstree-icon jstree-themeicon fa fa-briefcase icon-state-success  jstree-themeicon-custom"></i>test</a>

这两个锚标签完全相同,但我不知道为什么对方没有触发点击事件......任何人有什么想法?

4 个答案:

答案 0 :(得分:0)

这是因为从树到树的移动可能会从DOM中删除节点并再次插入它。

看看这个:

&#13;
&#13;
$('.myClass').click(function() {
  return false;
}).dblclick(function() {
  window.location = this.href;
});

$('.move').click(function() {
  var anchor = $('.myClass');
  anchor.remove();
  document.body.appendChild(anchor.get(0));
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<a href="http://example.com"/ class="myClass">link</a>
<button class="move">Move link</button>
&#13;
&#13;
&#13;

该问题的解决方案是使用jQuery的方法.on,它将事件附加到将来添加到DOM的所有元素。

答案 1 :(得分:0)

您是否检查过函数范围内是否可以访问this.href?很可能你引用的是jquery而不是对象本身

尝试:

var self = this;
$('.myClass').click(function(){
    return false;
}).dblclick(function() {
    window.location = this.href;
    return false;
});

答案 2 :(得分:0)

尝试这样:

$('body').on('click', '.tree-link', function(event){
        event.preventDefault();
        console.log('single-click');
}).on('dblclick', function() {
        event.preventDefault();
        console.log('double-click');
});

在这里摆弄:http://jsfiddle.net/vxm4quzz/1/

您也可能有兴趣阅读此内容:jQuery eventDelegation

答案 3 :(得分:0)

我放弃了使用锚点,并在使用window.location.href更改页面时使用了双击事件。目前这对我来说很好。如果有人有兴趣,这是代码:

$('#tree').on("dblclick", function (event) {
var li = $(event.target).closest("li");
var node = $('#tree').jstree().get_node(li.attr('id'));
if(node.icon.indexOf("briefcase") != -1){
    window.location.href = "#settings.html";
}