我正在尝试使用 ColdFusion 做一个简单的 jquery 自动完成,基于 Jens 的好例子。
HTML:
<form name="merchantSearch" id="merchantSearch" method="post" action="/index.cfm/shop.store/">
<input type="text" name="state" id="state"/>
<input type="submit" name="submit" id="submit" value="" class="searchButton"/>
<input type="hidden" name="merchantID" id="merchantID"/>
</form>
整个 json 结构显示在选择框中。当您单击一个时,它会用整个结构填充它。自动完成似乎对如何处理 json 感到非常困惑。
冷融合:
<cfloop query="request.qMerchants">
<cfset request.merchantStruct = StructNew()>
<cfset request.merchantStruct["merchantID"] = #request.qMerchants.merchantID#>
<cfset request.altText = altText..."
<cfset request.merchantStruct["label"] = #request.qMerchants.merchant#&#request.altText#>
<cfset ArrayAppend(request.merchantArray, request.merchantStruct)>
</cfloop>
<cfoutput>
#serializeJSON(request.merchantArray)#
</cfoutput>
查询:
$(document).ready(function(){
$("#state").autocomplete(
"xhr/merchantAutoComplete.cfm",
{
minLength:2,
minchars:2,
autoFill:false,
select:function(event,ui) {
$("#merchantID").val(ui.item.merchantID);
$("#merchant").val(ui.item.merchant);
}
}
);
});
CF 文件返回 json 格式的数据,但它保持为 json。结果最终如下:
[
{"label":"AAA 112 pts\/$","merchantID":6},
{"label":"BBB 64 pts\/$","merchantID":62},
{"label":"CCC 48 pts\/$","merchantID":277},
{"label":"DDD 144 pts\/$","merchantID":278},
{"label":"EEE 80 pts\/$","merchantID":279}
]
选择一个会将整个 json 结构放入选择框中。我假设我有一组正确的 jquery、jquery UI 和 css 文件来取回任何东西,但我会发布它们只是为了让它变得臃肿:
<script src="/assets/js/jquery/jquery.autocomplete.js"></script>
<script src="/assets/js/jquery/jquery1.4.2.js"></script>
<link rel="stylesheet" href="/assets/css/jquery.autocomplete.css" type="text/css" media="screen, projection" />
<script src="/assets/js/jquery/jquery-ui-1.8.2.js"></script>
我确定这是一个“标签/价值”问题,但似乎没有任何帮助。任何建议都会很棒..谢谢!乔恩
这个还没有想通。我认为远程调用正在返回格式正确的 json 结构。看起来像:
[{"value":"FedEx Office 48 pts per $","id":578},{"value":"Fergie Shoes.com 88 pts per $","id":784}]
自动完成 js 看起来像:
$(document).ready(function(){
$("#merchantLabel").autocomplete(
"xhr/merchantAutoComplete.cfm",
{
select:function(event,ui) {
$("#merchantID").val(ui.item.id);
return false;
}
}
);
});
html 看起来像:
<form name="merchantSearch" id="merchantSearch" method="post" action="/index.cfm/shop.store/">
<input type="text" name="merchantLabel" id="merchantLabel"/>
<input type="submit" name="submit" id="submit" value="" class="searchButton"/>
<input type="hidden" name="merchantID" id="merchantID"/>
</form>