2013-12-20 3 views
0

я пишу JS код, который считывает XML файл и извлекать информацию требуется от него, я хочу найти имя выбранного элемента, это мой код :странного поведения переменного при встрече, если условие

function initialize() { 
    ct = $('menu').children().length; 

    for(cati=0;cati<=ct-1;cati++) { 
     cats[cati] = $('menu').children().eq(cati).prop('nodeName'); 
    } 

    var selecteditem = $(".selected").text(); 

    for(j=0;j<=cats.length;j++) { 
     if(selecteditem == realnames[j]) { 
       selecteditem = cats[j]; 
     } 
    } 

    $("#gallery").empty(); 
    alert($('menu').find(selecteditem).prop('nodeName')); 
} 

здесь, в моем коде, когда оповещение с использованием последнего STMT есть два сценария, первый из них, когда if statement условия не достигается, и в этом случае оповещение дает мне желаемый результат (выбранный элемент), но когда if statement условие достигнуто, предупреждение дает мне undifined, хотя я уверен, что cats[j] является элементом в XML-файле.

+0

где задано 'realnames'? –

+0

Похоже, вы сравниваете объекты, которые никогда не вернут 'true'. –

+0

Можете ли вы показать нам некоторые из ваших XML-файлов, чтобы мы увидели, что вы пытаетесь сделать? –

ответ

1

По крайней мере, ваш для петель выглядеть странно

// Always use them like this 
for (var i = 0;i < arr.length;i++){ 
    // do stuff with arr[i] 
} 

Престол в ваш первый цикл вы получили

for (var i = 0;i <= arr.length-1;i++){ 
    // do stuff with arr[i] 
} 

А во втором

for (var i = 0;i <= arr.length;i++){ 
    // do stuff with arr[i] 
} 

Вы должны придерживаться один способ объявления for loops. Нет необходимости сокращать с arr.length, если вы используете только оператор < для сравнения i и arr.length. Не работает <=. Во втором цикле вы выходите из границ массива.


Еще одна странная вещь, которую вы получили там. Когда вы зацикливаете массив кошек.

for(j=0;j<=cats.length;j++) { 
    if(selecteditem == realnames[j]) { 
      selecteditem = cats[j]; 
    } 
} 

Вы ссылаетесь на realNames[] массив с итератора j из cats[] массива. Хотя теоретически это может работать, если вы всегда получали одинаковое количество cats[] и realNames[] в двух разных массивах, и вы никогда не сортируете их, и они всегда действительно отображают 1 к 1 друг с другом, но этот подход уязвим для ошибок, это не выглядит как надежный способ обойти это. Плюс, конечно, цикл for выходит за пределы. Как упоминалось ранее.

+0

realnames [], полученный от кошек [], и forsure имеет одинаковую длину, также я думаю, что это не о том, поскольку для циклов for, работающих нормально и проблема возникает только при достижении условия if второго цикла – MRefaat

+0

Я думаю, что дело в котах [j] – MRefaat

+0

@MRefaat Посмотрите, петли не работают нормально. Если вы не хотите, чтобы они выходили за пределы. Посмотрите на этот пример: http://jsfiddle.net/WQRwy/ –

Смежные вопросы