📄 combobox.js
字号:
clearTimeout(this.searchTimer); } if (doSearch) { this._blurOptionNode(); this.searchTimer = setTimeout(dojo.lang.hitch(this, this._startSearchFromInput), this.searchDelay); }}, compositionEnd:function (evt) { evt.key = evt.keyCode; this._handleKeyEvents(evt);}, onKeyUp:function (evt) { this.setValue(this.textInputNode.value);}, setSelectedValue:function (value) { this.comboBoxSelectionValue.value = value;}, setAllValues:function (value1, value2) { this.setSelectedValue(value2); this.setValue(value1);}, _focusOptionNode:function (node) { if (this._highlighted_option != node) { this._blurOptionNode(); this._highlighted_option = node; dojo.html.addClass(this._highlighted_option, "dojoComboBoxItemHighlight"); }}, _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); } } dojo.html.scrollIntoView(this._highlighted_option);}, _highlightPrevOption:function () { if (this._highlighted_option && this._highlighted_option.previousSibling) { this._focusOptionNode(this._highlighted_option.previousSibling); } else { this._highlighted_option = null; this._hideResultList(); return; } dojo.html.scrollIntoView(this._highlighted_option);}, _itemMouseOver:function (evt) { if (evt.target === this.optionsListNode) { return; } this._focusOptionNode(evt.target); dojo.html.addClass(this._highlighted_option, "dojoComboBoxItemHighlight");}, _itemMouseOut:function (evt) { if (evt.target === this.optionsListNode) { return; } this._blurOptionNode();}, onResize:function () { var inputSize = dojo.html.getContentBox(this.textInputNode); if (inputSize.height <= 0) { dojo.lang.setTimeout(this, "onResize", 100); return; } var buttonSize = {width:inputSize.height, height:inputSize.height}; dojo.html.setContentBox(this.downArrowNode, buttonSize);}, fillInTemplate:function (args, frag) { dojo.html.applyBrowserClass(this.domNode); var source = this.getFragNodeRef(frag); if (!this.name && source.name) { this.name = source.name; } this.comboBoxValue.name = this.name; this.comboBoxSelectionValue.name = this.name + "_selected"; dojo.html.copyStyle(this.domNode, source); dojo.html.copyStyle(this.textInputNode, source); dojo.html.copyStyle(this.downArrowNode, source); with (this.downArrowNode.style) { width = "0px"; height = "0px"; } var dpClass; if (this.dataProviderClass) { if (typeof this.dataProviderClass == "string") { dpClass = dojo.evalObjPath(this.dataProviderClass); } else { dpClass = this.dataProviderClass; } } else { if (this.mode == "remote") { dpClass = dojo.widget.incrementalComboBoxDataProvider; } else { dpClass = dojo.widget.basicComboBoxDataProvider; } } this.dataProvider = new dpClass(this, this.getFragNodeRef(frag)); this.popupWidget = new dojo.widget.createWidget("PopupContainer", {toggle:this.dropdownToggle, toggleDuration:this.toggleDuration}); dojo.event.connect(this, "destroy", this.popupWidget, "destroy"); this.optionsListNode = this.popupWidget.domNode; this.domNode.appendChild(this.optionsListNode); dojo.html.addClass(this.optionsListNode, "dojoComboBoxOptions"); dojo.event.connect(this.optionsListNode, "onclick", this, "_selectOption"); dojo.event.connect(this.optionsListNode, "onmouseover", this, "_onMouseOver"); dojo.event.connect(this.optionsListNode, "onmouseout", this, "_onMouseOut"); dojo.event.connect(this.optionsListNode, "onmouseover", this, "_itemMouseOver"); dojo.event.connect(this.optionsListNode, "onmouseout", this, "_itemMouseOut");}, _openResultList:function (results) { if (this.disabled) { return; } this._clearResultList(); if (!results.length) { this._hideResultList(); } if ((this.autoComplete) && (results.length) && (!this._prev_key_backspace) && (this.textInputNode.value.length > 0)) { var cpos = this._getCaretPos(this.textInputNode); if ((cpos + 1) > this.textInputNode.value.length) { this.textInputNode.value += results[0][0].substr(cpos); this._setSelectedRange(this.textInputNode, cpos, this.textInputNode.value.length); } } var even = true; while (results.length) { var tr = results.shift(); if (tr) { var td = document.createElement("div"); td.appendChild(document.createTextNode(tr[0])); td.setAttribute("resultName", tr[0]); td.setAttribute("resultValue", tr[1]); td.className = "dojoComboBoxItem " + ((even) ? "dojoComboBoxItemEven" : "dojoComboBoxItemOdd"); even = (!even); this.optionsListNode.appendChild(td); } } this._showResultList();}, _onFocusInput:function () { this._hasFocus = true;}, _onBlurInput:function () { this._hasFocus = false; this._handleBlurTimer(true, 500);}, _handleBlurTimer:function (clear, millisec) { if (this.blurTimer && (clear || millisec)) { clearTimeout(this.blurTimer); } if (millisec) { this.blurTimer = dojo.lang.setTimeout(this, "_checkBlurred", millisec); }}, _onMouseOver:function (evt) { if (!this._mouseover_list) { this._handleBlurTimer(true, 0); this._mouseover_list = true; }}, _onMouseOut:function (evt) { var relTarget = evt.relatedTarget; try { if (!relTarget || relTarget.parentNode != this.optionsListNode) { this._mouseover_list = false; this._handleBlurTimer(true, 100); this._tryFocus(); } } catch (e) { }}, _isInputEqualToResult:function (result) { var input = this.textInputNode.value; if (!this.dataProvider.caseSensitive) { input = input.toLowerCase(); result = result.toLowerCase(); } return (input == result);}, _isValidOption:function () { var tgt = dojo.html.firstElement(this.optionsListNode); var isValidOption = false; while (!isValidOption && tgt) { if (this._isInputEqualToResult(tgt.getAttribute("resultName"))) { isValidOption = true; } else { tgt = dojo.html.nextElement(tgt); } } return isValidOption;}, _checkBlurred:function () { if (!this._hasFocus && !this._mouseover_list) { this._hideResultList(); if (!this.textInputNode.value.length) { this.setAllValues("", ""); return; } var isValidOption = this._isValidOption(); if (this.forceValidOption && !isValidOption) { this.setAllValues("", ""); return; } if (!isValidOption) { this.setSelectedValue(""); } }}, _selectOption:function (evt) { var tgt = null; if (!evt) { evt = {target:this._highlighted_option}; } if (!dojo.html.isDescendantOf(evt.target, this.optionsListNode)) { if (!this.textInputNode.value.length) { return; } tgt = dojo.html.firstElement(this.optionsListNode); if (!tgt || !this._isInputEqualToResult(tgt.getAttribute("resultName"))) { return; } } else { tgt = evt.target; } while ((tgt.nodeType != 1) || (!tgt.getAttribute("resultName"))) { tgt = tgt.parentNode; if (tgt === dojo.body()) { return false; } } this.selectedResult = [tgt.getAttribute("resultName"), tgt.getAttribute("resultValue")]; this.setAllValues(tgt.getAttribute("resultName"), tgt.getAttribute("resultValue")); if (!evt.noHide) { this._hideResultList(); this._setSelectedRange(this.textInputNode, 0, null); } this._tryFocus();}, _clearResultList:function () { if (this.optionsListNode.innerHTML) { this.optionsListNode.innerHTML = ""; }}, _hideResultList:function () { this.popupWidget.close();}, _showResultList:function () { var childs = this.optionsListNode.childNodes; if (childs.length) { var visibleCount = Math.min(childs.length, this.maxListLength); with (this.optionsListNode.style) { display = ""; if (visibleCount == childs.length) { height = ""; } else { height = visibleCount * dojo.html.getMarginBox(childs[0]).height + "px"; } width = (dojo.html.getMarginBox(this.domNode).width - 2) + "px"; } this.popupWidget.open(this.domNode, this, this.downArrowNode); } else { this._hideResultList(); }}, handleArrowClick:function () { this._handleBlurTimer(true, 0); this._tryFocus(); if (this.popupWidget.isShowingNow) { this._hideResultList(); } else { this._startSearch(""); }}, _tryFocus:function () { try { this.textInputNode.focus(); } catch (e) { }}, _startSearchFromInput:function () { this._startSearch(this.textInputNode.value);}, _startSearch:function (key) { this.dataProvider.startSearch(key, dojo.lang.hitch(this, "_openResultList"));}, postCreate:function () { this.onResize(); dojo.event.connect(this.textInputNode, "onblur", this, "_onBlurInput"); dojo.event.connect(this.textInputNode, "onfocus", this, "_onFocusInput"); if (this.disabled) { this.disable(); } var s = dojo.widget.html.stabile.getState(this.widgetId); if (s) { this.setState(s); }}});
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -