[英]Jquery Autocomplete _renderItem does not work when Function is called a second time
[英]Jquery function - When called second time, not receiving fresh data, uses old?
我在多次調用一個函數時遇到麻煩。 每次我調用它時,它都應該接收到新數據(即使它與先前的數據相同),但是以某種方式,下一次調用該函數將產生第一次調用該函數的預期輸出。
編碼:
$.calc=function(arrayName){
console.log(arrayName);
for(i=0;i<arrayName.length;i++){
if(i==2){
arrayName[i]="";
}
}
}
var arr=new Array();
arr[0]="saab";
arr[1]="saab";
arr[2]="saab";
arr[3]="saab";
arr[4]="volvo";
arr[5]="volvo";
//First run
$.calc(arr);
//Second run
$.calc(arr);
如果運行代碼( http://jsfiddle.net/76bme/ )並打開控制台logger / devtools,您會看到我正在打印出與該函數一起傳遞的數組的內容,然后再執行數組。 下次調用該函數時,將與第一次調用該函數時相同的數組(arr)傳遞給該函數,因此我希望開始時的console.log可以從該數組中打印出相同的內容。 但是,現在數組保留了所有內容,除了索引2之外,在我使用console.log打印出來后,將其修改為“”。 如果這是另一種方法,我會得到它(for循環后有console.log),但是現在我很困惑!
那我在做什么錯?
更改
console.log(arrayName);
至
console.log(arrayName.join(";"));
您將看到您的期望。 控制台[取決於狀態]在當前記錄該對象/數組時,不會顯示該對象/數組的快照,有時會存儲對其的引用,因此它將具有當前值。
這是因為arrayName
是對數組對象的引用。 因此,當您更改該對象中的某些內容時,您的arr
也將受到影響。 如果您不希望這種行為,則需要“創建數組的副本”:
$.calc=function(arrayName){
console.log(arrayName)
var myArr = Array.prototype.slice.call(arrayName); //Just here!
for(i=0;i<myArr.length;i++){
if(i==2){
myArr[i]="";
}
}
}
小提琴: http : //jsfiddle.net/76bme/5/
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.