列表3―doChange函数
projsf.jdj.doChange = function(event,doSuggestURL){ var input = (event.srcElement || event.target); var inputId = input.id; var context = { _inputId: inputId }; net.java.dev.mabon.send({ url: doSuggestURL, args: [input.value], callback: function(result) { projsf.jdj._callback.call(context,result);} }); return true; }
|
列表4:_callback函数
projsf.jdj._callback = function(results){ var inputId = this._inputId; var input = document.getElementById(inputId); var div = document.getElementById(inputId + "$suggest"); if (results.length <= 1) { div.style.display = "none"; return; } //从上下文中得到输入域ID var input = document.getElementById(inputId); div.style.width = input.offsetWidth; while (div.firstChild) { div.removeChild(div.firstChild); } for (var i=0; i < results.length; i++) { var row = document.createElement("div"); var span = document.createElement("span"); var text = document.createTextNode(results[i]); row.className = "HtmlInputSuggestRow"; row.appendChild(text); row.onmouseover = new Function("event", "projsf.jdj._doMouseOver(event || window.event)"); row.onclick = new Function("event", "projsf.jdj._doMouseClick(event || window.event)"); div.appendChild(row); } div.firstChild.className = "HtmlInputSuggestActiveRow"; div.style.display = "block"; window.setTimeout("projsf.jdj._selectText('" + inputId + "', " + "'" + input.value + "', " + "'" + results[0] + "')", 200); }
|
列表5:_selectText函数
projsf.jdj._selectText=function(inputId,initialValue,suggestion){ var input = document.getElementById(inputId); if (input.value != initialValue) return; if (input.value == suggestion) return; if (input.createTextRange)//IE特定的 { var selectionStart = input.value.length; input.value = suggestion; var range = input.createTextRange(); range.moveStart("character", selectionStart); range.moveEnd("character", input.value.length); range.select(); } else //DOM兼容的 { var selectionStart = input.value.length; input.value = suggestion; input.selectionStart = selectionStart; input.selectionEnd = input.value.length; } }
|
列表6.HtmlInputSuggestRenderer的encodeBegin()方法
package com.apress.projsf.jdj.render.html; Import ...//(省略) /** *HtmlInputSuggestRenderer用自动建议的行为生成一个传统的HtmlInputText域 *. */ public class HtmlInputSuggestRenderer extends HtmlRenderer{ //... public static String TITLE_ATTR = "title"; public static String DO_SUGGEST_ATTR = "doSuggest"; public void encodeBegin( FacesContext context, UIComponent component) throws IOException { writeScriptResource(context, "weblet://org.dojotoolkit.browserio/dojo.js"); writeScriptResource(context, "weblet://net.java.dev.mabon/mabon.js"); writeScriptResource(context, "weblet://com.apress.projsf.jdj/inputSuggest.js"); writeStyleResource(context, "weblet://com.apress.projsf.jdj/inputSuggest.css"); }
|