jstree:区分左/中鼠标点击

时间:2014-01-16 10:03:13

标签: javascript jstree

以下代码设置了我的树(s:property标签是struts2的东西):

$(function () {
       $("#networkTree").jstree({ 
          "json_data" : {
             "ajax" : {
                "url" : "<s:property value='networkTreeDataUrl'/>"
             }
          },
          "plugins" : [ "themes", "json_data", "ui" ],
          "themes" : {
                "theme" : "default",
                "dots" : true,
                "icons" : false
          },
          "core" : {
              "html_titles" : true
           }
       }).bind("select_node.jstree", function (event, data) {
              window.location.href = "<s:property value='companyDetailsUrl'/>" + "?companyId=" + data.rslt.obj.attr("id");
              })
});

当用户左键单击树项时,窗口URL会根据 companyDetailsUrl 而更改。到目前为止是正确的,但我想像往常一样点击鼠标中键时,浏览器(chrome)在新选项卡中打开链接。似乎任何鼠标单击都会选择树节点,这会触发替换window.location的绑定事件。防止这种情况的最佳方法是什么?

1 个答案:

答案 0 :(得分:2)

我会去找事件处理程序的which - 属性 根据jQuery文档,这提供了一种区分按钮的简便方法:

  

event.which也标准化按钮按下(mousedown和mouseupevents),报告左按钮1,中间2,右3。

//rest of the code omitted
.bind("select_node.jstree", function (event, data) {
    if(event.which == 1) {
        //open link in current window
        window.location.href = YOURURL;
    } else if (event.which == 3) {
        //open link in new window
        window.open(YOURURL, '_blank');
    }
 })

请注意,您必须替换YOURURL(显然)。为了便于阅读,我省略了它。

进一步请注意,这很可能会打开一个新的窗口,而不是新的标签。如需进一步阅读为什么打开新窗口以及如何打开新标签页,我建议您阅读this question