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

📄 conditional_selection.js.svn-base

📁 PHP 知识管理系统(基于树结构的知识管理系统), 英文原版的PHP源码。
💻 SVN-BASE
字号:
// 'lookups' and 'connections' are produced by the master conditional widgetvar NOSELECTION = 'No selection.';function ConditionalSelection() {}function in_array(a, val) {    if(!a.length) {	return;    }    for(var i=0;i<a.length;i++) {	if(a[i] == val) {	    return true;	}    }    return false;}function getId(elm) {    if(elm.id.search('field_') != -1) {	return elm.id.substring('field_'.length);    } else if(elm.id.search('lookup_') != -1) {	return elm.id.substring('lookup_'.length);    }    return false;}ConditionalSelection.prototype = {    'initialize' : function(masterId) {	// make clones of the original nodes to keep the options in	var fieldLookups = {};	var current = {};	var lookups = eval('lookups_' + masterId);	var connections = eval('connections_' + masterId);	// initialize - build various tables	forEach(getElementsByTagAndClassName(null, 'is_conditional_' + masterId),		function(elm) {		    var fieldId = getId(elm);		    for(var i=0; i<elm.options.length; i++) {			var oElm = elm.options[i];			var lookupId = oElm.id.substring('lookup_'.length);			fieldLookups[lookupId] = {'parent':fieldId, 'value':oElm.innerHTML};			if(oElm.selected && oElm.value) {			    current[fieldId] = oElm.value;			}		    }		});	// the following function are defined inline, as they depend on the	// 'lookups' and 'connections' being specified above	function clearConnected(fieldId) {	    if(!fieldId in connections || !connections[fieldId].length) {		return;	    }	    for(var i=0; i<connections[fieldId].length; i++) {		var field = $('field_'+connections[fieldId][i]);		replaceChildNodes(field, OPTION(null, NOSELECTION));		field.disabled = true;		clearConnected(connections[fieldId][i]);	    }	}		function clearInvalid(fieldId) {	    if(!fieldId in connections || !connections[fieldId].length) {		return;	    }	    	    var parentField = $('field_'+fieldId);	    var selectedId = getId(parentField.options[parentField.selectedIndex]);	    var options = lookups[selectedId];	    if(parentField.options[parentField.selectedIndex].innerHTML == NOSELECTION) {		clearConnected(fieldId);	    } else {		for(var i=0; i<connections[fieldId].length; i++) {		    var field = $('field_'+connections[fieldId][i]);		    var newOptions = [];		    var selected = null;		    for(var j=0; j<field.options.length; j++) {			var opt = field.options[j];			if(!(opt.innerHTML != NOSELECTION  && !in_array(options, getId(opt)))) {			    newOptions.push(opt);			}			if(j == field.selectedIndex && opt.id && in_array(options, getId(opt))) {			    selected = opt.id;			}		    }		    field.selectedIndex = 0;		    replaceChildNodes(field, null);		    		    for(var j=0; j<newOptions.length; j++) {			var opt = newOptions[j];			appendChildNodes(field, opt);						if(selected != null) {			    if(opt.id && opt.id == selected) { // || j == 0 && field.selectedIndex == 0) {				field.selectedIndex = j;			    }			}			    		    }		    if(selected == null) {			field.selectedIndex = 0;			field.options[0].selected = 'selected';		    }		    clearInvalid(connections[fieldId][i]);		}	    }	}	// instead of clearing here, we remove the non-applicable options	// this should handle the case with existing selections	clearInvalid(masterId);		function populateForSelection(selectedId) {	    if(selectedId in lookups) {		for(var i=0; i<lookups[selectedId].length; i++) {		    var lookupId = lookups[selectedId][i];		    var lookupInfo = fieldLookups[lookupId];		    		    var parent = $('field_' + lookupInfo['parent']);		    appendChildNodes(parent, 				     OPTION({'value':lookupInfo['value'], 'id':'lookup_' + lookupId}, 					    lookupInfo['value']));		    parent.disabled = false;		}	    }	}	forEach(getElementsByTagAndClassName(null, 'is_conditional_' + masterId), function(elm) {		    // check if this field connects to anything else		    var fieldId = elm.id.substring('field_'.length);		    if(fieldId in connections && connections[fieldId].length) {			var controller = true;		    }		    if(controller) {			connect(elm, 'onchange', 				function() {				    var selectedId = elm.options[elm.selectedIndex].id.substring('lookup_'.length);				    var touched = [];				    clearConnected(fieldId);				    populateForSelection(selectedId);				});		    }		});    }}addLoadEvent(function() {    var masters = getElementsByTagAndClassName('select', 'is_master');    for(var i=0; i<masters.length; i++) {	var elm = masters[i];	var masterId = getId(elm);	var d = new ConditionalSelection();	d.initialize(masterId);    }});

⌨️ 快捷键说明

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