Autocomplete Can';我不能让你自动完成工作

Autocomplete Can';我不能让你自动完成工作,autocomplete,yui,Autocomplete,Yui,在过去的几个小时里,我一直在阅读YUI文档和代码,但我无法让它正常工作 我的远程数据源是XML。我有一个本地代理来检索远程数据 我已经通过Firebug确认,当我在输入字段中键入时,请求正在发送,数据正在返回。但是,我配置用来保存结果的div没有被写入。在检查DOM时,YUI使用用于保存结果的html结构填充我的div,但没有内容 经常有文档记录调用函数“formatResult”来过滤结果。然而,这永远不会发生。我通过在函数中使用alert()来测试这一点 我不知道到底发生了什么事。下面是我的

在过去的几个小时里,我一直在阅读YUI文档和代码,但我无法让它正常工作

我的远程数据源是XML。我有一个本地代理来检索远程数据

我已经通过Firebug确认,当我在输入字段中键入时,请求正在发送,数据正在返回。但是,我配置用来保存结果的div没有被写入。在检查DOM时,YUI使用用于保存结果的html结构填充我的div,但没有内容

经常有文档记录调用函数“formatResult”来过滤结果。然而,这永远不会发生。我通过在函数中使用alert()来测试这一点

我不知道到底发生了什么事。下面是我的XML格式和代码。我正在通过YUI加载程序加载数据源和自动完成依赖项

<div id="auto-search">
    <input type="text" id="auto-search-input" value=""/>
    <div id="auto-search-results"></div>
</div>


YAHOO.example.auto = function() {

    var searchDataSource = new YAHOO.util.XHRDataSource("http://localhost/insidersearchproxy.php"); 
    searchDataSource.responseType = YAHOO.util.XHRDataSource.TYPE_XML; 
    searchDataSource.responseSchema = { 
        resultNode : "RelatedResult", 
        fields: [ "rid","rtype", "title", "thumbURL" ]
    }

    var autosearch = new YAHOO.widget.AutoComplete("auto-search-input","auto-search-results", searchDataSource); 
    autosearch.generateRequest = function(sQuery) { 
        return "?q="+sQuery;
    }; 

    autosearch.resultsTypeList = false; // pass data as an object 

    autosearch.applyLocalFilter = true; // pass results thru filter
    autosearch.formatResult = function(oResultData, sQuery, sResultMatch) { 
        var sMarkup = (sResultMatch) ? sResultMatch : ""; 
        return sMarkup; 
    };

    return {
        searchDataSource: searchDataSource,
        autosearch: autosearch
    };
}();

<list>
  <RelatedResult>
    <rid>2014</rid>
    <rtype>Celebrity</rtype>
    <title>Adam Brody</title>
    <thumbURL>http://cm1.theinsider.com/media/0/52/65/wenn1302741.50.jpg</thumbURL>
  </RelatedResult>

  <RelatedResult>
    <rid>2776</rid>
    <rtype>Celebrity</rtype>
    <title>Adam Sandler</title>
    <thumbURL>http://cm1.theinsider.com/media/0/49/95/wenn1198212.50.jpg</thumbURL>
  </RelatedResult>
  <RelatedResult>

    <rid>3084</rid>
    <rtype>Celebrity</rtype>
    <title>Bryan Adams</title>
    <thumbURL>http://cm1.theinsider.com/media/0/1/46/RoomSer4.50.jpg</thumbURL>
  </RelatedResult>
  <RelatedResult>
    <rid>5747</rid>

    <rtype>Celebrity</rtype>
    <title>Amy Adams</title>
    <thumbURL>http://cm1.theinsider.com/media/0/56/87/wenn5095565.50.jpg</thumbURL>
  </RelatedResult>
  <RelatedResult>
    <rid>6572</rid>
    <rtype>Celebrity</rtype>

    <title>Adam Richard</title>
    <thumbURL>http://cm1.theinsider.com/media/0/7/97/Adam_Richard_small.50.jpg</thumbURL>
  </RelatedResult>
  <RelatedResult>
    <rid>9001</rid>
    <rtype>Celebrity</rtype>
    <title>Adam Goldberg</title>

    <thumbURL>http://cm1.theinsider.com/media/0/80/15/91969967.50.jpg</thumbURL>
  </RelatedResult>
  <RelatedResult>
    <rid>30897</rid>
    <rtype>Celebrity</rtype>
    <title>Adam Rothenberg</title>
    <thumbURL>http://cm1.theinsider.com/media/0/99/86/ex_bio_adam.50.jpg</thumbURL>

  </RelatedResult>
  <RelatedResult>
    <rid>58009</rid>
    <rtype>Celebrity</rtype>
    <title>Adam Lambert</title>
    <thumbURL>http://cm1.theinsider.com/media/0/361/95/271363.50.jpg</thumbURL>
  </RelatedResult>

</list>

YAHOO.example.auto=函数(){
var searchDataSource=新的YAHOO.util.XHRDataSource(“http://localhost/insidersearchproxy.php"); 
searchDataSource.responseType=YAHOO.util.XHRDataSource.TYPE_XML;
searchDataSource.responseSchema={
resultNode:“RelatedResult”,
字段:[“rid”、“rtype”、“title”、“thumbURL”]
}
var autosearch=newyahoo.widget.AutoComplete(“自动搜索输入”,“自动搜索结果”,searchDataSource);
autosearch.generateRequest=函数(sQuery){
返回“?q=“+sQuery;
}; 
autosearch.resultsTypeList=false;//将数据作为对象传递
autosearch.applyLocalFilter=true;//通过筛选器传递结果
autosearch.formatResult=函数(oResultData、sQuery、sResultMatch){
变量sMarkup=(sResultMatch)?sResultMatch:;
返回标记;
};
返回{
searchDataSource:searchDataSource,
自动搜索:自动搜索
};
}();
2014
名人
亚当·布罗迪
http://cm1.theinsider.com/media/0/52/65/wenn1302741.50.jpg
2776
名人
亚当·桑德勒
http://cm1.theinsider.com/media/0/49/95/wenn1198212.50.jpg
3084
名人
布莱恩·亚当斯
http://cm1.theinsider.com/media/0/1/46/RoomSer4.50.jpg
5747
名人
艾米·亚当斯
http://cm1.theinsider.com/media/0/56/87/wenn5095565.50.jpg
6572
名人
亚当·理查德
http://cm1.theinsider.com/media/0/7/97/Adam_Richard_small.50.jpg
9001
名人
亚当·戈德伯格
http://cm1.theinsider.com/media/0/80/15/91969967.50.jpg
30897
名人
亚当·罗森伯格
http://cm1.theinsider.com/media/0/99/86/ex_bio_adam.50.jpg
58009
名人
亚当·兰伯特
http://cm1.theinsider.com/media/0/361/95/271363.50.jpg

如果看不到完整的实现,很难确定,但您可以尝试关闭“ApplyCalFilter”。换句话说,更改此行:

autosearch.applyLocalFilter = true; // pass results thru filter
对此,请改为:

autosearch.applyLocalFilter = false;
有关使用代码的工作实现,请参见我的测试页面:


如果没有看到完整的实现,很难确定,但您可以尝试关闭“ApplyCalFilter”。换句话说,更改此行:

autosearch.applyLocalFilter = true; // pass results thru filter
对此,请改为:

autosearch.applyLocalFilter = false;
有关使用代码的工作实现,请参见我的测试页面:


您当然应该重载“filterResponse”,而不是“formatResult”。后者只是一个回调,允许您控制结果的显示方式。

您当然应该重载“filterResponse”,而不是“formatResult”。后者只是一个回调,允许您控制结果的显示方式。

而不是

YAHOO.example.auto = function() {...}
试一试

而不是

YAHOO.example.auto = function() {...}
试一试