⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 webfxcheckboxtreeitem_zh.js

📁 An object based tree widget, emulating the one found in microsoft windows, | | with persistence usi
💻 JS
字号:
/*
 *	Sub class that adds a check box in front of the tree item icon
 *
 *	Created by Erik Arvidsson (http://webfx.eae.net/contact.html#erik)
 *
 *	Disclaimer:	This is not any official WebFX component. It was created due to
 *				demand and is just a quick and dirty implementation. If you are
 *				interested in this functionality the contact us
 *				http://webfx.eae.net/contact.html
 *
 *	Notice that you'll need to add a css rule the sets the size of the input box.
 *	Something like this will do fairly good in both Moz and IE
 *
 *	input.tree-check-box {
 *		width:		auto;
 *		margin:		0;
 *		padding:	0;
 *		height:		14px;
 *		vertical-align:	middle;
 *	}
 *
 */

function WebFXCheckBoxTreeItem(sText,sObj,sAction, bChecked, eParent, sIcon, sOpenIcon) {
	this.base = WebFXTreeItem;
	this.base(sText,sObj,sAction, eParent, sIcon, sOpenIcon);
	this._checked = bChecked;
}

WebFXCheckBoxTreeItem.prototype = new WebFXTreeItem;

WebFXCheckBoxTreeItem.prototype.toString = function (nItem, nItemCount) {
	var foo = this.parentNode;
	var indent = '';
	if (nItem + 1 == nItemCount) { this.parentNode._last = true; }
	var i = 0;
	while (foo.parentNode) {
		foo = foo.parentNode;
		indent = "<img id=\"" + this.id + "-indent-" + i + "\" src=\"" + ((foo._last)?webFXTreeConfig.blankIcon:webFXTreeConfig.iIcon) + "\">" + indent;
		i++;
	}
	this._level = i;
	if (this.childNodes.length) { this.folder = 1; }
	else { this.open = false; }
	if ((this.folder) || (webFXTreeHandler.behavior != 'classic')) {
		if (!this.icon) { this.icon = webFXTreeConfig.folderIcon; }
		if (!this.openIcon) { this.openIcon = webFXTreeConfig.openFolderIcon; }
	}
	else if (!this.icon) { this.icon = webFXTreeConfig.fileIcon; }
	var label = this.text.replace(/</g, '&lt;').replace(/>/g, '&gt;');
	var str = "<div id=\"" + this.id + "\" ondblclick=\"if(event.srcElement.tagName != 'INPUT')webFXTreeHandler.toggle(this);\" class=\"webfx-tree-item\" onkeydown=\"return webFXTreeHandler.keydown(this, event)\">";
	str += indent;
	str += "<img id=\"" + this.id + "-plus\" src=\"" + ((this.folder)?((this.open)?((this.parentNode._last)?webFXTreeConfig.lMinusIcon:webFXTreeConfig.tMinusIcon):((this.parentNode._last)?webFXTreeConfig.lPlusIcon:webFXTreeConfig.tPlusIcon)):((this.parentNode._last)?webFXTreeConfig.lIcon:webFXTreeConfig.tIcon)) + "\" onclick=\"webFXTreeHandler.toggle(this);\">"

	// insert check box modified by liu_xc 2004.6.30 增加checkbox双击事件
	str += "<input type=\"checkbox\"" +
		" class=\"tree-check-box\"" +
		(this._checked ? " checked=\"true\"" : "false") +
		" onclick=\"webFXTreeHandler.all[this.parentNode.id].setChecked(this.checked);\"" +
		" ondblclick=\"webFXTreeHandler.all[this.parentNode.id].setDDBChecked(this.checked);\"" +
		" />";
	// end insert checkbox

	str += "<img id=\"" + this.id + "-icon\" class=\"webfx-tree-icon\" src=\"" + ((webFXTreeHandler.behavior == 'classic' && this.open)?this.openIcon:this.icon) + "\" onclick=\"webFXTreeHandler.select(this);\"><a id=\"" + this.id + "-anchor\" onfocus=\"webFXTreeHandler.focus(this);\" onblur=\"webFXTreeHandler.blur(this);\">" + label + "</a></div>";
	str += "<div id=\"" + this.id + "-cont\" class=\"webfx-tree-container\" style=\"display: " + ((this.open)?'block':'none') + ";\">";
	for (var i = 0; i < this.childNodes.length; i++) {
		str += this.childNodes[i].toString(i,this.childNodes.length);
	}
	str += "</div>";
	this.plusIcon = ((this.parentNode._last)?webFXTreeConfig.lPlusIcon:webFXTreeConfig.tPlusIcon);
	this.minusIcon = ((this.parentNode._last)?webFXTreeConfig.lMinusIcon:webFXTreeConfig.tMinusIcon);
	return str;
}

WebFXCheckBoxTreeItem.prototype.getChecked = function () {
	var divEl = document.getElementById(this.id);
	var inputEl = divEl.getElementsByTagName("INPUT")[0];
	return this._checked = inputEl.checked;
};

WebFXCheckBoxTreeItem.prototype.setChecked = function (bChecked)
{
    var divEl = document.getElementById(this.id);
    var inputEl = divEl.getElementsByTagName("INPUT")[0];
    //用于程序控制checkbox的选取
	if (bChecked != this.getChecked())
    {
		this._checked = inputEl.checked = bChecked;

		if (typeof this.onchange == "function")
			this.onchange();
	}
//    else
//    {
//        //added by liu_xc 2004.6.30 checkbox选取约定
//        //如果checkbox由选中状态变为未选中状态,
//        //如果父亲和至少一个儿子的checkbox被选中了,则不允许取消
//        if(bChecked == false)
//        {
//            //如果是一级节点,则可以直接操作,因为不存在含有checkbox的父节点
//            if(this.parentNode.parentNode == null)
//                return;
//            //如果是叶子节点,则可以直接操作,因为不含有checkbox的子节点
//            if(this.childNodes.length <= 0)
//                return;
//            //标记父节点的checkbox是否被选中
//            var isParentChecked = judgeItemChk(this.parentNode);
//            //标记是否存在一个子节点的checkbox被选中
//            var isChildChecked = judgeItemsChk(this.childNodes);
//            //如果父节点和至少一个子节点同时被选中,该节点不能取消选择
//            if(isParentChecked == true && isChildChecked == true)
//            {
//                this._checked = inputEl.checked = true;
//            }
//        }
//    }
};
//判断节点的checkbox是否被选中
//function judgeItemChk(oItem)
//{
//    var oDiv = document.getElementById(oItem.id);
//    var oInput = oDiv.getElementsByTagName("INPUT")[0];
//    return oInput.checked;
//}
//判断节点组的checkbox是否被选中
//function judgeItemsChk(oItems)
//{
//    for(var i=0; i<oItems.length; i++)
//    {
//        var oDiv = document.getElementById(oItems[i].id);
//        var oInput = oDiv.getElementsByTagName("INPUT")[0];
//        if(oInput == null)
//            continue;
//        if(oInput.checked == true)
//            return true;
//    }
//    return false;
//}
//added by liu_xc 2004.6.30 增加双击事件,对儿子全部选中
WebFXCheckBoxTreeItem.prototype.setDBChecked = function (bChecked)
{
	var oChildItems = this.childNodes;
	for(var i=0; i<oChildItems.length; i++)
	{
		var oDiv = document.getElementById(oChildItems[i].id);
		var oInput = oDiv.getElementsByTagName("INPUT")[0];
        if(oInput != null)
    		oChildItems[i]._checked = oInput.checked = bChecked;
	}
};

//added by liu_xc 2004.6.30 增加双击事件,对全部后代选中
WebFXCheckBoxTreeItem.prototype.setDDBChecked = function (bChecked)
{
	var oChildItems = this.childNodes;
	for(var i=0; i<oChildItems.length; i++)
	{
		var oDiv = document.getElementById(oChildItems[i].id);
		var oInput = oDiv.getElementsByTagName("INPUT")[0];
        if(oChildItems[i].folder)
        {
            if(oInput != null)
                oChildItems[i]._checked = oInput.checked = bChecked;
            oChildItems[i].setDDBChecked(bChecked);
        }
        else
        {
            if(oInput != null)
                oChildItems[i]._checked = oInput.checked = bChecked;
        }
	}
};

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -