2012-04-23 2 views
1

У меня есть любопытная проблема с некоторым javascript. В следующем коде браузер выполнит более одного пути в условиях if, else if, else if. Так, например, консоль будет записывать «c» или «b c».Javascript, выполняющий более одного случая в if else statement

if (divs[i].row == hover_div.row && divs[i].obj != hover_div.obj) 
{ 
    console.log("a"); 
    divs[i].obj.stop() 
     .animate({'width':d_thin}, { duration:600, queue:false }) 
     .animate({'height':d_expand}, { duration:600, queue:false }); 
} 
else if (divs[i].col == hover_div.col && divs[i].obj != hover_div.obj) 
{ 
    console.log("b"); 
    divs[i].obj.stop() 
     .animate({'width':d_expand}, { duration:600, queue:false }) 
     .animate({'height':d_thin}, { duration:600, queue:false }); 
} 
else if (divs[i].obj != hover_div.obj); 
{ 
    console.log("c"); 
    divs[i].obj.stop() 
     .animate({'width':d_thin}, { duration:600, queue:false }) 
     .animate({'height':d_thin}, { duration:600, queue:false }); 
} 

Я проверил, что код не выполняется дважды, добавив счетчик непосредственно за пределы блока. Если я устанавливаю инструкции if, как показано ниже, все это прекрасно работает, но мне не нужно это делать?

if (divs[i].row == hover_div.row && divs[i].obj != hover_div.obj) 
{ 
    console.log("a"); 
    divs[i].obj.stop() 
     .animate({'width':d_thin}, { duration:600, queue:false }) 
     .animate({'height':d_expand}, { duration:600, queue:false }); 
} 
else { 
    if (divs[i].col == hover_div.col && divs[i].obj != hover_div.obj) 
    { 
     console.log("b"); 
     divs[i].obj.stop() 
      .animate({'width':d_expand}, { duration:600, queue:false }) 
      .animate({'height':d_thin}, { duration:600, queue:false }); 
    } 
    else { 
     if (divs[i].obj != hover_div.obj); 
     { 
      console.log("c"); 
      divs[i].obj.stop() 
       .animate({'width':d_thin}, { duration:600, queue:false }) 
       .animate({'height':d_thin}, { duration:600, queue:false }); 
     } 
    } 
} 
+0

у вас возникли проблемы с любопытством –

+0

Почему бы не просто отладить его? – vals

ответ

14
else if (divs[i].obj != hover_div.obj); // <-- 

удалить точку с запятой

+0

Приветствия за это. Невозможно понемногу внимательно прочитать код! – unfrev

4

Вы завершающую точку с запятой на этой линии:

else if (divs[i].obj != hover_div.obj); 

который является таким же, как говорят:

else if (...) { 
    // do nothing 
} 

{ 
    console.log("c"); 
    ... 
} 

Следовательно, блок С всегда запускается.

+0

+1 для объяснения, почему точка с запятой была неправильной. – ShiningLight