今天遇到一個問題,我需要傳一個文本庫的內容給后台,然后用autocomplete顯示內容,開始覺得很簡單
不就是
function SalePrice_Complete(text) { //分割拿到索引 var value=$("#MaterielID_" + text.selector.split('_')[1]).val(); text.autocomplete("/Control/webControl.ashx", { dataType: 'json', //返回數據類型 width: 220, minChars: 0, extraParams: { Method: "SalePriceAutoComplate",MaterielID:value}, parse: function (data) { //后台返回的數據傳給自定義的rows var rows = []; for (var i = 0; i < data.length; i++) { rows[rows.length] = { data: "[" + data[i].FPirce + " " + data[i].FDate + "]", //顯示在搜索界面的列表 value: data[i].FPirce , //查詢結果 result: data[i].FPirce //顯示在文本框的內容 }; } return rows; }, formatItem: function (row, i, n) { return row; } }).result(function (event, item, returnvalue) { var values = returnvalue; var index = text[0].id; var i = index.split('_')[1]; //物料編號 $("#price_" + i).val(values[0]); }); };
但是代碼運行后發現,MaterielID得到是空的,想了很久不知道為什么,於是在后台和js都下了斷點,再運行,發現js沒有再運行過了,但是后台卻斷點斷到了
所以我們可以推斷,變量是要動態賦值的
於是參考了下網上的代碼,修改成
function SalePrice_Complete(text) { text.autocomplete("/Control/webControl.ashx", { dataType: 'json', //返回數據類型 width: 220, minChars: 0, extraParams: { Method: "SalePriceAutoComplate",MaterielID:function(){ return $("#MaterielID_" + text.selector.split('_')[1]).val()}}, parse: function (data) { //后台返回的數據傳給自定義的rows var rows = []; for (var i = 0; i < data.length; i++) { rows[rows.length] = { data: "[" + data[i].FPirce + " " + data[i].FDate + "]", //顯示在搜索界面的列表 value: data[i].FPirce , //查詢結果 result: data[i].FPirce //顯示在文本框的內容 }; } return rows; }, formatItem: function (row, i, n) { return row; } }).result(function (event, item, returnvalue) { var values = returnvalue; var index = text[0].id; var i = index.split('_')[1]; //物料編號 $("#price_" + i).val(values[0]); }); };
這樣后台拿到MaterielID就有值了,事實證明,在對代碼機制不熟悉的情況下,用正常思維去推只能讓你陷入煩惱和氣憤中,想着明明有賦值,怎么到后台就不見了,所以還是多用斷點多調試,用事實說話