求助 谁用过 YUI AutoComplete,我用的是AutoComplete Control: FunctionDataSource to Search Multiple Fields of an Address Book at Runtime,但是提示oAC.itemSelectEvent is null,怎么解决?还有可不可以提供一个成功的例子,在线等,急用!!!谢谢!!! 以下是代码
function projectMsg(id,gctId,taskName){ this.id=id; this.projectGctId=gctId; this.projectName=taskName; } //myIput projectResultConttainer //myAutoComplete-->searchProject //myInput-->myIput //myContainer-->projectResultConttainer function autoComplement(projectResultStr){ var nameList=projectResultStr.split('||||'); alert("projectResultStr="+projectResultStr); alert("flagSearch="+flagSearch); var inputContacts=new Array(nameList.length/3|0);; for(var i=0;i<nameList.length;i++){ var gctId; var taskName; var projectDetail; var useTime; if(flagSearch.length>4){ gctId=nameList[i]; taskName=nameList[++i]; projectDetail=nameList[++i]; useTime=nameList[++i]; }else{ gctId=nameList[i]; taskName=nameList[++i]; projectDetail=nameList[++i]; } var projectRecord=new projectMsg(i,gctId,taskName); inputContacts[i]=projectRecord; } YAHOO.example.FnMultipleFields = function(){ var myContacts = inputContacts; // Define a custom search function for the DataSource var matchNames = function(sQuery) { // Case insensitive matching var query = sQuery.toLowerCase(), contact, i=0, l=myContacts.length, matches = []; // Match against each name of each contact for(; i<l; i++) { contact = myContacts[i]; if((contact.gctId.toLowerCase().indexOf(query) > -1) || (contact.taskName.toLowerCase().indexOf(query) > -1)) { matches[matches.length] = contact; } } return matches; }; // Use a FunctionDataSource var oDS = new YAHOO.util.FunctionDataSource(matchNames); oDS.responseSchema = { fields: ["id", "gctId", "taskName"] } // Instantiate AutoComplete var oAC = new YAHOO.widget.AutoComplete("myInput", "projectResultConttainer", oDS); oAC.useShadow = true; oAC.resultTypeList = false; // Custom formatter to highlight the matching letters oAC.formatResult = function(oResultData, sQuery, sResultMatch) { var query = sQuery.toLowerCase(), fname = oResultData.gctId, lname = oResultData.taskName, //nname = oResultData.nname || "", Guard against null value query = sQuery.toLowerCase(), fnameMatchIndex = fname.toLowerCase().indexOf(query), lnameMatchIndex = lname.toLowerCase().indexOf(query), //nnameMatchIndex = nname.toLowerCase().indexOf(query), displayfname, displaylname;// displaynname; if(fnameMatchIndex > -1) { displayfname = highlightMatch(fname, query, fnameMatchIndex); } else { displayfname = fname; } if(lnameMatchIndex > -1) { displaylname = highlightMatch(lname, query, lnameMatchIndex); } else { displaylname = lname; } <%--if(nnameMatchIndex > -1) { displaynname = "(" + highlightMatch(nname, query, nnameMatchIndex) + ")"; } else { displaynname = nname ? "(" + nname + ")" : ""; } --%> return displayfname + " " + displaylname ;//+ " " + displaynname; }; // Helper function for the formatter var highlightMatch = function(full, snippet, matchindex) { return full.substring(0, matchindex) + "<span class='match'>" + full.substr(matchindex, snippet.length) + "</span>" + full.substring(matchindex + snippet.length); }; // Define an event handler to populate a hidden form field // when an item gets selected and populate the input field var myHiddenField = YAHOO.util.Dom.get("myHidden"); var myHandler = function(sType, aArgs) { //请问这里的两个参数从哪里来的? var myAC = aArgs[0]; // reference back to the AC instance var elLI = aArgs[1]; // reference to the selected LI element var oData = aArgs[2]; // object literal of selected item's result data // update hidden form field with the selected item's ID myHiddenField.value = oData.id; myAC.getInputEl().value = oData.fname + " " + oData.lname ;// + (oData.nname ? " (" + oData.nname + ")" : ""); }; //oAC.itemSelectEvent = new YAHOO.util.CustomEvent("itemSelect", this); alert("Company ID: " + myHiddenField.value); oAC.itemSelectEvent.subscribe(myHandler);//报 oAC.itemSelectEvent is null是怎么回事? return { oDS: oDS, oAC: oAC }; }();
function projectMsg(id,gctId,taskName){ this.id=id; this.projectGctId=gctId; this.projectName=taskName; } //myIput projectResultConttainer //myAutoComplete-->searchProject //myInput-->myIput //myContainer-->projectResultConttainer function autoComplement(projectResultStr){ var nameList=projectResultStr.split('||||'); alert("projectResultStr="+projectResultStr); alert("flagSearch="+flagSearch); var inputContacts=new Array(nameList.length/3|0);; for(var i=0;i<nameList.length;i++){ var gctId; var taskName; var projectDetail; var useTime; if(flagSearch.length>4){ gctId=nameList[i]; taskName=nameList[++i]; projectDetail=nameList[++i]; useTime=nameList[++i]; }else{ gctId=nameList[i]; taskName=nameList[++i]; projectDetail=nameList[++i]; } var projectRecord=new projectMsg(i,gctId,taskName); inputContacts[i]=projectRecord; } YAHOO.example.FnMultipleFields = function(){ var myContacts = inputContacts; // Define a custom search function for the DataSource var matchNames = function(sQuery) { // Case insensitive matching var query = sQuery.toLowerCase(), contact, i=0, l=myContacts.length, matches = []; // Match against each name of each contact for(; i<l; i++) { contact = myContacts[i]; if((contact.gctId.toLowerCase().indexOf(query) > -1) || (contact.taskName.toLowerCase().indexOf(query) > -1)) { matches[matches.length] = contact; } } return matches; }; // Use a FunctionDataSource var oDS = new YAHOO.util.FunctionDataSource(matchNames); oDS.responseSchema = { fields: ["id", "gctId", "taskName"] } // Instantiate AutoComplete var oAC = new YAHOO.widget.AutoComplete("myInput", "projectResultConttainer", oDS); oAC.useShadow = true; oAC.resultTypeList = false; // Custom formatter to highlight the matching letters oAC.formatResult = function(oResultData, sQuery, sResultMatch) { var query = sQuery.toLowerCase(), fname = oResultData.gctId, lname = oResultData.taskName, //nname = oResultData.nname || "", Guard against null value query = sQuery.toLowerCase(), fnameMatchIndex = fname.toLowerCase().indexOf(query), lnameMatchIndex = lname.toLowerCase().indexOf(query), //nnameMatchIndex = nname.toLowerCase().indexOf(query), displayfname, displaylname;// displaynname; if(fnameMatchIndex > -1) { displayfname = highlightMatch(fname, query, fnameMatchIndex); } else { displayfname = fname; } if(lnameMatchIndex > -1) { displaylname = highlightMatch(lname, query, lnameMatchIndex); } else { displaylname = lname; } <%--if(nnameMatchIndex > -1) { displaynname = "(" + highlightMatch(nname, query, nnameMatchIndex) + ")"; } else { displaynname = nname ? "(" + nname + ")" : ""; } --%> return displayfname + " " + displaylname ;//+ " " + displaynname; }; // Helper function for the formatter var highlightMatch = function(full, snippet, matchindex) { return full.substring(0, matchindex) + "<span class='match'>" + full.substr(matchindex, snippet.length) + "</span>" + full.substring(matchindex + snippet.length); }; // Define an event handler to populate a hidden form field // when an item gets selected and populate the input field var myHiddenField = YAHOO.util.Dom.get("myHidden"); var myHandler = function(sType, aArgs) { //请问这里的两个参数从哪里来的? var myAC = aArgs[0]; // reference back to the AC instance var elLI = aArgs[1]; // reference to the selected LI element var oData = aArgs[2]; // object literal of selected item's result data // update hidden form field with the selected item's ID myHiddenField.value = oData.id; myAC.getInputEl().value = oData.fname + " " + oData.lname ;// + (oData.nname ? " (" + oData.nname + ")" : ""); }; //oAC.itemSelectEvent = new YAHOO.util.CustomEvent("itemSelect", this); alert("Company ID: " + myHiddenField.value); oAC.itemSelectEvent.subscribe(myHandler);//报 oAC.itemSelectEvent is null是怎么回事? return { oDS: oDS, oAC: oAC }; }();
这是官网上的实例
http://developer.yahoo.com/yui/examples/autocomplete/ac_fn_multfields.html