2012-12-05 5 views
0

Почему это условие всегда выполняет ELSE, а не ветвь IF. Вот JavaScript:Javascript не выполняет инструкцию ветвления IF

$(document).ready(function(){ 

if (document.getElementById("analyses").value == 'distance'){ 

loadScript('/static/distance.js', function() 
{ 
    console.log('done loading'); 
    }); 
}else{ 
loadScript('/static/geoClusters.js', function() 
{ 
console.log('done loading'); 
}); 
} 
}); 

Форма имеет несколько выбора тегов с различными значениями опций, как, например:

<select name="analysis" id="analyses"> 
    <option value="" disabled="disabled" selected="selected">Select Analysis</option> 
     <option value="distance">distance</option> 
     <option value="clustered">clustering</option> 
</select> 

Я не могу видеть, что случилось с, если-иначе даного.

Благодаря

EDIT

Спасибо за все большие предложения, я думаю, что путь код структурирован путь, предложенный @trebuchet работы:

$("#analyses").bind("change",function(){ 
.............code....... 
}); 

Спасибо всем.

+2

У вас есть хороший ответ о том, как это сделать с помощью jQuery, но если вы пытаетесь это сделать, вы можете посмотреть на этот вопрос: [Как получить выбранное значение dropdownlist с помощью JavaScript?] (http://stackoverflow.com/questions/1085801/ how-to-get-the-selected-value-of-dropdownlist-using-javascript) – Cymen

ответ

2

Путь ваш код структурирован он будет работать только один раз при загрузке страницы - в этом случае значение избранных всегда будет пустая строка. Если вы хотите, чтобы реагировать на изменения:

$("#analyses").bind("change",function(){ 

    if (document.getElementById("analyses").value == 'distance'){ 

     loadScript('/static/distance.js', function() 
     { 
      console.log('done loading'); 
     }); 
    }else{ 
     loadScript('/static/geoClusters.js', function() 
     { 
      console.log('done loading'); 
     }); 
    } 
}); 
+0

Спасибо, что работает – user94628

6

Вы фактически не можете использовать value как на элементе HTML select - он имеет свойство selectedIndex, но не selectedValue. JQuery делает реализацию val() на отдельных элементах, хотя:

if ($("#analyses").val() == 'distance') 

Если вы делаете это с прямым Javascript, то вы должны сначала получить выбранный индекс, то значение из option элемента:

var sel = document.getElementById("analyses"); 
if (sel.options[sel.selectedIndex].value) 

Чтобы ответить на ваш вопрос, с оригинальным кодом, JavaScript всегда будет выполнять else ветви, потому что document.getElementById("analyses").value является undefined, что Javascript как приведения типов «ложь» в булевой statem Ent.

Fiddle.

+0

Спасибо. Я попробовал ваш пример в скрипке и немного изменил его, но у меня такая же проблема. http://jsfiddle.net/9EAsm/7/ – user94628

+0

@ user94628 есть ошибки скрипта в вашей скрипке ... см. здесь: http://jsfiddle.net/kMHVS/1/ – McGarnagle

+1

Спасибо за помощь ... путь мой код был настроен, он не работал. Спасибо за помощь. – user94628

1

во время document.ready пожаров, стоимость анализов всегда будет «», потому что выбран вариант по умолчанию. Я не уверен, поскольку первый вариант отключен, почему это происходит, но, видимо, это то, что происходит.

При изменении по умолчанию выбрано значению опции на «расстояние», то это огня вы можете увидеть здесь:

<select name="analysis" id="analyses"> 
    <option value="" disabled="disabled">Select Analysis</option> 
     <option value="distance" selected="selected">distance</option> 
     <option value="clustered">clustering</option> 
</select>​ 

Я отправил тест здесь: http://jsfiddle.net/BKD4u/

+0

Спасибо за предложение – user94628

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