나는 내가 겪고있는 매우 이상한 문제가 있습니다. 내 사이트 중 하나에서 JQueryUI의 jsTree를 사용하고 있으며, 다른 .js 파일에서 다른 구현을 사용하고 있습니다. 그것들 중 하나가 작동하는 것처럼 보이는데, 이는 깨진 구현과 거의 동일한 코드 (변수 이름 만 다름)를 사용하기 때문에 매우 혼란 스럽습니다. 문제는 contextmenu 함수에서 발생합니다. 내가 사용하고있는 코드는 다음과 같습니다 :Javascript 배열 임의로 요소를 잃는 중
$(document).ready(function() {
if(typeof dryerList == 'undefined' || dryerList.length == 0) {
var dryerList = [];
$.ajax({
url:'../TrackingApp/getGrainBins.php?t=234.23423452353',
async: false,
success: function(text) {
try {
dryerList = $.parseJSON(text);
} catch (e) {
alert('ERROR: ' + e);
}
if(dryerList.length == 0) {
alert('ERROR: No fleet data received.')
}
}
});
}
$("#dryerListTree").jstree({
plugins : ['json_data', 'ui', 'themes', 'contextmenu'],
contextmenu: {items: customBinMenu},
json_data : { data: binNodes }
});
$('#dryerListTree').bind("dblclick.jstree", function (event) {
var node = $(event.target).closest("li");
var id = node[0].id;
for(i=0; i < dryerList.length; i++) {
if(id == dryerList[i].id) {
centerMap(dryerList[i].y, dryerList[i].x);
break;
}
}
});
});
function customBinMenu(node) {
if ($(node).hasClass("folder")) {
return;
}
var items = {
centerItem: {
label: "Locate",
action: function() {
// Centers map on selected bin
var id = node[0].id;
for(i=0; i < dryerList.length; i++) {
if(id == dryerList[i].id) {
centerMap(dryerList[i].y, dryerList[i].x);
break;
}
}
}
},
dashboardItem: {
label: "Dashboard",
action: function() {
// Opens dryer info window over map
var id = node[0].id;
var dryerIndex = -1;
for(i=0; i < dryerList.length; i++) {
if(id == dryerList[i].id) {
dryerIndex = i;
break;
}
}
}
}
};
return items;
}
이상한 점은 두 번 클릭 처리기가 잘 작동한다는 것입니다. customBinMenu() 함수에 도착하면 dryerList 배열이 있고 dryerList [0]에 5 개의 값 중 4 개가 포함되어 있어야하지만 어떻게 든 'id'요소가 해당 객체에서 삭제됩니다. 나는 이것을 꽤 오랫동안보고 있었고, 다른 데이터를 잃지 않고 객체로부터 하나의 엘리먼트를 떨어 뜨릴 수있는 방법을 찾아 낼 수 없다. 특히 동일한 코드가 동일한리스트에서 작동 할 때 특히 그렇다. 어떤 제안?
전역 변수 "i"는 세 곳에서 사용하고 있습니다. 'var'를 사용하여 로컬 변수를 선언하려면 JavaScript에서 매우 조심해야합니다. – Pointy
여러 곳에서 사용하고 있지만, 순차적으로 만 변수를 사용할 때마다 다시 설정되고 재설정 될 때까지 다시 사용되지 않습니다. – Crash
나는 그것이 아마도 문제가 아니라는 것에 동의하지만 그럼에도 불구하고 위험한 불필요한 연습입니다. – Pointy