問題1:從webserver或者一般應用處理常式(.ashx)程式得到json字串時不能自動識別,被解釋成了string類型的。其實解決這個問題不是很難,只需要重載一個方法即可,下面把部分代碼貼出來:標紅的部分需要注意。
複製代碼 代碼如下:$("#txt").autocomplete("/Asmx/ExecutePlan.ashx", {
extraParams:{hosid:HosID,profid:ProfID},
minChars: 0,
max: 700,
mustMatch: true,
autoFill: true,
selectFirst: true,
scrollHeight: 220,
width:640,
scroll:true,
parse: function(data){
var obj=eval("("+data+")");
var row = [];
for(var i = 0; i<obj.length; i++){
row[i] = {data:obj[i], //json
value: obj[i].instName, //列表中中的值
result: obj[i].instName}; //顯示到下拉式清單中的
}
if(obj.length == 1)
{
// $("#hfInstID").val(obj[0].executeID);
// $("#Button1").click();
}
return row;
} ,
formatItem: function(row, i, total) {
},
formatMatch: function(row, i, max) {
},
formatResult: function(row, i, max) {
}
});
這樣問題就可以解決了,但是出現了一個新的問題,就是formatItem和formatMatch兩個事件都失效了,暫時不知道怎麼解決。但是要是想在填入結果時做一些操作還是可以實現的,那就是調用這個方法,要注意,這個是和前一個$("#txt").autocomplete分開寫的,寫在上面那個Binder 方法的最下面就好了。
$("#txt").result(function(event, data, formatted) {
});
具體的參數含義可以參考官方的開發文檔。目前我用到的功能就這麼多,以後如果遇到新的再補充。
補充一點:$("#txt").flushCache();方法是用來清空autocomplete緩衝的,有時候改變參數後會有緩衝遺留問題。