我有一个点击事件,只允许锚标签双击时才能工作。当锚标记位于原始树中但在将树中的文件复制到另一个树之后,这种方法可以正常工作,但事件不会触发,只需单击即可使锚标记工作。有人知道这个的原因吗?锚标记在新树中完全相同。我的代码如下:
$('.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>
这两个锚标签完全相同,但我不知道为什么对方没有触发点击事件......任何人有什么想法?
答案 0 :(得分:0)
这是因为从树到树的移动可能会从DOM中删除节点并再次插入它。
看看这个:
$('.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;
该问题的解决方案是使用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";
}