iamjxc
|
|
« on: April 25, 2014, 05:31:45 AM » |
|
function onCombotreeShowPanel(){ // 显示下拉框, 展开到当前节点 var t = $(this).combotree('tree'); var node = t.tree('getSelected'); if (node){ t.tree('expandTo', node.target); } }
(function($){ // 实现下拉树的本地检索功能 $.fn.combotree.defaults.editable = true; $.extend($.fn.combotree.methods,{ nav:function(jq, dir){ return jq.each(function(){ var opts = $(this).combotree('options'); var t = $(this).combotree('tree'); var nodes = t.tree('getChildren'); if (!nodes.length) {return;} var node = t.tree('getSelected'); if (!node){ t.tree('select', dir>0 ? nodes[0].target : nodes[nodes.length-1].target); } else { var index = 0; for(var i=0; i<nodes.length; i++){ if (nodes.target == node.target){ index = i; break; } } if (dir>0){ while (index < nodes.length-1){ index++; if ($(nodes[index].target).is(':visible')){break;} } } else { while (index > 0){ index--; if ($(nodes[index].target).is(':visible')){break;} } } t.tree('select',nodes[index].target); t.tree('scrollTo',nodes[index].target); }
if (opts.selectOnNavigation){ var node = t.tree('getSelected'); $(this).combotree("setValue", node.id); // $(node.target).trigger('click'); // $(this).combotree('showPanel'); } }); } }); // 检测当前能否编辑 function checkEditable(el){ var opt = el.combo("options"); if (opt.readonly || opt.disabled) { return false; } return opt.editable; } $.extend($.fn.combotree.defaults.keyHandler,{ up:function(){ var el = $(this); if (!checkEditable(el)) return; // 当前 panel 已展开, 则处理nav, 否则先显示 panel var p = el.combotree('panel'); if (p.is(':visible')){ el.combotree('nav', -1); }else{ el.combotree('showPanel'); } }, down:function(){ var el = $(this); if (!checkEditable(el)) return; // 当前 panel 已展开, 则处理nav, 否则先显示 panel var p = el.combotree('panel'); if (p.is(':visible')){ el.combotree('nav', 1); }else{ el.combotree('showPanel'); } }, right:function(){ var el = $(this); if (!checkEditable(el)) return; var p = el.combotree('panel'); if (!p.is(':visible')){return;} // 展开当前节点的分支 var t = el.combotree('tree'); var node = t.tree('getSelected'); if (node){ t.tree('expand', node.target); } }, left:function(){ var el = $(this); if (!checkEditable(el)) return; var p = el.combotree('panel'); if (!p.is(':visible')){return;} var t = el.combotree('tree'); var node = t.tree('getSelected'); if (node){ var isLeaf = t.tree('isLeaf', node.target); if (!isLeaf && node.state == "open"){ // 如果不是叶子节点, 并且当前是展开状态, 则收缩当前分支 t.tree('collapse', node.target); }else{ // 如果有父节点, 则收缩父节点, 并且选中父节点 var parent = t.tree('getParent', node.target); if (parent){ t.tree('collapse', parent.target); t.tree('select', parent.target); // 需要时, 更新textbox的值 var opts = el.combo("options"); if (opts.selectOnNavigation){ el.combotree("setValue", parent.id); } } } } }, enter:function(){ var el = $(this); if (!checkEditable(el)) return; var p = el.combotree('panel'); if (!p.is(':visible')){return;} var t = el.combotree('tree'); var node = t.tree('getSelected'); if (node){ $(node.target).trigger('click'); } $(this).combotree('hidePanel'); } }); $.extend($.fn.combotree.defaults.keyHandler,{ query:function(q){ if (q == "") { // 用于触发 onchange $(this).combotree('setValue', ""); return; } var opts = $(this).combotree('options'); var t = $(this).combotree('tree'); var nodes = t.tree('getChildren'); for(var i=0; i<nodes.length; i++){ var node = nodes; // if (node.text.indexOf(q) >= 0){ if (opts.filter && opts.filter(q, node)){ if (q != ""){ // 必须展开, 否则显示不出来 t.tree('expandTo', node.target); } $(node.target).show(); } else { $(node.target).hide(); } } // 点击下拉, 则恢复显示 if (!opts.hasSetEvents){ opts.hasSetEvents = true; var onShowPanel = opts.onShowPanel; opts.onShowPanel = function(){ // 恢复显示 var nodes = t.tree('getChildren'); for(var i=0; i<nodes.length; i++){ $(nodes.target).show(); } onShowPanel.call(this); }; $(this).combo('options').onShowPanel = opts.onShowPanel; } } }); })(jQuery);
|