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

📄 combobox.js

📁 dojo与json创建无限级树的时候,当在父结点下添加了一个新结点,我怎么让父亲结点重新调用json加载一下子结点内容.
💻 JS
📖 第 1 页 / 共 2 页
字号:
/*	Copyright (c) 2004-2006, The Dojo Foundation	All Rights Reserved.	Licensed under the Academic Free License version 2.1 or above OR the	modified BSD license. For more information on Dojo licensing, see:		http://dojotoolkit.org/community/licensing.shtml*/dojo.provide("dojo.widget.html.ComboBox");dojo.require("dojo.widget.ComboBox");dojo.require("dojo.widget.*");dojo.require("dojo.io.*");dojo.require("dojo.lfx.*");dojo.require("dojo.dom");dojo.require("dojo.html");dojo.require("dojo.string");dojo.require("dojo.widget.html.stabile");dojo.widget.defineWidget(	"dojo.widget.html.ComboBox",	[dojo.widget.HtmlWidget, dojo.widget.ComboBox],	{		autoComplete: true,		formInputName: "",		name: "", // clone in the name from the DOM node		textInputNode: null,		comboBoxValue: null,		comboBoxSelectionValue: null,		optionsListWrapper: null,		optionsListNode: null,		downArrowNode: null,		cbTableNode: null,		searchTimer: null,		searchDelay: 100,		dataUrl: "",		fadeTime: 200,		// maxListLength limits list to X visible rows, scroll on rest 		maxListLength: 8, 		// mode can also be "remote" for JSON-returning live search or "html" for		// dumber live search		mode: "local", 		selectedResult: null,		_highlighted_option: null,		_prev_key_backspace: false,		_prev_key_esc: false,		_result_list_open: false,		_gotFocus: false,		_mouseover_list: false,		dataProviderClass: "dojo.widget.ComboBoxDataProvider",		templatePath: dojo.uri.dojoUri("src/widget/templates/HtmlComboBox.html"),		templateCssPath: dojo.uri.dojoUri("src/widget/templates/HtmlComboBox.css"),			setValue: function(value) {			this.comboBoxValue.value = value;			if (this.textInputNode.value != value) { // prevent mucking up of selection				this.textInputNode.value = value;			}			dojo.widget.html.stabile.setState(this.widgetId, this.getState(), true);		},			getValue: function() {			return this.comboBoxValue.value;		},			getState: function() {			return {value: this.getValue()};		},			setState: function(state) {			this.setValue(state.value);		},			getCaretPos: function(element){			// khtml 3.5.2 has selection* methods as does webkit nightlies from 2005-06-22			if(dojo.lang.isNumber(element.selectionStart)){				// FIXME: this is totally borked on Moz < 1.3. Any recourse?				return element.selectionStart;			}else if(dojo.render.html.ie){				// in the case of a mouse click in a popup being handled,				// then the document.selection is not the textarea, but the popup				// var r = document.selection.createRange();				// hack to get IE 6 to play nice. What a POS browser.				var tr = document.selection.createRange().duplicate();				var ntr = element.createTextRange();				tr.move("character",0);				ntr.move("character",0);				try {					// If control doesnt have focus, you get an exception.					// Seems to happen on reverse-tab, but can also happen on tab (seems to be a race condition - only happens sometimes).					// There appears to be no workaround for this - googled for quite a while.					ntr.setEndPoint("EndToEnd", tr);					return String(ntr.text).replace(/\r/g,"").length;				} catch (e) {					return 0; // If focus has shifted, 0 is fine for caret pos.				}							}		},			setCaretPos: function(element, location){			location = parseInt(location);			this.setSelectedRange(element, location, location);		},			setSelectedRange: function(element, start, end){			if(!end){ end = element.value.length; }  // NOTE: Strange - should be able to put caret at start of text?			// Mozilla			// parts borrowed from http://www.faqts.com/knowledge_base/view.phtml/aid/13562/fid/130			if(element.setSelectionRange){				element.focus();				element.setSelectionRange(start, end);			}else if(element.createTextRange){ // IE				var range = element.createTextRange();				with(range){					collapse(true);					moveEnd('character', end);					moveStart('character', start);					select();				}			}else{ //otherwise try the event-creation hack (our own invention)				// do we need these?				element.value = element.value;				element.blur();				element.focus();				// figure out how far back to go				var dist = parseInt(element.value.length)-end;				var tchar = String.fromCharCode(37);				var tcc = tchar.charCodeAt(0);				for(var x = 0; x < dist; x++){					var te = document.createEvent("KeyEvents");					te.initKeyEvent("keypress", true, true, null, false, false, false, false, tcc, tcc);					element.dispatchEvent(te);				}			}		},			// does the keyboard related stuff		_handleKeyEvents: function(evt){			if(evt.ctrlKey || evt.altKey){ return; }				// reset these			this._prev_key_backspace = false;			this._prev_key_esc = false;				var k = dojo.event.browser.keys;			var doSearch = true;				// mozilla quirk 			// space has no keyCode in mozilla			var keyCode = evt.keyCode;			if(keyCode==0 && evt.charCode==k.KEY_SPACE){				keyCode = k.KEY_SPACE;			}			switch(keyCode){	 			case k.KEY_DOWN_ARROW:					if(!this._result_list_open){						this.startSearchFromInput();					}					this.highlightNextOption();					dojo.event.browser.stopEvent(evt);					return;				case k.KEY_UP_ARROW:					this.highlightPrevOption();					dojo.event.browser.stopEvent(evt);					return;				case k.KEY_ENTER:					// prevent submitting form if we press enter with list open					if(this._result_list_open){						dojo.event.browser.stopEvent(evt);					}					// fallthrough				case k.KEY_TAB:					// using linux alike tab for autocomplete					if(!this.autoComplete && this._result_list_open && this._highlighted_option){						dojo.event.browser.stopEvent(evt);						this.selectOption({ 'target': this._highlighted_option, 'noHide': true });							// put caret last						this.setSelectedRange(this.textInputNode, this.textInputNode.value.length, null);					}else{						this.selectOption();						return;					}					break;				case k.KEY_SPACE:					if(this._result_list_open && this._highlighted_option){						dojo.event.browser.stopEvent(evt);						this.selectOption();						this.hideResultList();						return;					}					break;				case k.KEY_ESCAPE:					this.hideResultList();					this._prev_key_esc = true;					return;				case k.KEY_BACKSPACE:					this._prev_key_backspace = true;					if(!this.textInputNode.value.length){						this.setAllValues("", "");						this.hideResultList();						doSearch = false;					}					break;				case k.KEY_RIGHT_ARROW: // fall through				case k.KEY_LEFT_ARROW: // fall through				case k.KEY_SHIFT:					doSearch = false;					break;				default:// non char keys (F1-F12 etc..)  shouldn't open list					if(evt.charCode==0){						doSearch = false;					}			}				if(this.searchTimer){				clearTimeout(this.searchTimer);			}			if(doSearch){				// if we have gotten this far we dont want to keep our highlight				this.blurOptionNode();					// need to wait a tad before start search so that the event bubbles through DOM and we have value visible				this.searchTimer = setTimeout(dojo.lang.hitch(this, this.startSearchFromInput), this.searchDelay);			}		},			onKeyDown: function(evt){			// IE needs to stop keyDown others need to stop keyPress			if(!document.createEvent){ // only IE				this._handleKeyEvents(evt);			}			// FIXME: What about ESC ??		},			onKeyPress: function(evt){			if(document.createEvent){ // never IE				this._handleKeyEvents(evt);			}		},			onKeyUp: function(evt){			this.setValue(this.textInputNode.value);		},			setSelectedValue: function(value){			// FIXME, not sure what to do here!			this.comboBoxSelectionValue.value = value;		},		setAllValues: function(value1, value2){			this.setValue(value1);			this.setSelectedValue(value2);		},			// opera, khtml, safari doesnt support node.scrollIntoView(), workaround		scrollIntoView: function(){			var node = this._highlighted_option;			var parent = this.optionsListNode;			// don't rely on that node.scrollIntoView works just because the function is there			// it doesnt work in Konqueror or Opera even though the function is there and probably			// not safari either			// dont like browser sniffs implementations but sometimes you have to use it			if(dojo.render.html.ie || dojo.render.html.mozilla){				// IE, mozilla				node.scrollIntoView(false);				}else{				var parentBottom = parent.scrollTop + dojo.style.getInnerHeight(parent);				var nodeBottom = node.offsetTop + dojo.style.getOuterHeight(node);				if(parentBottom < nodeBottom){					parent.scrollTop += (nodeBottom - parentBottom);				}else if(parent.scrollTop > node.offsetTop){					parent.scrollTop -= (parent.scrollTop - node.offsetTop);				}			}		},			// does the actual highlight		focusOptionNode: function(node){			if(this._highlighted_option != node){				this.blurOptionNode();				this._highlighted_option = node;				dojo.html.addClass(this._highlighted_option, "dojoComboBoxItemHighlight");			}		},			// removes highlight on highlighted		blurOptionNode: function(){			if(this._highlighted_option){				dojo.html.removeClass(this._highlighted_option, "dojoComboBoxItemHighlight");				this._highlighted_option = null;			}		},			highlightNextOption: function(){			if((!this._highlighted_option) || !this._highlighted_option.parentNode){				this.focusOptionNode(this.optionsListNode.firstChild);			}else if(this._highlighted_option.nextSibling){				this.focusOptionNode(this._highlighted_option.nextSibling);			}			this.scrollIntoView();		},	

⌨️ 快捷键说明

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