0

この条件がIFブランチではなく常にELSEを実行するのはなぜですか。これがjavascriptです:

$(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タグがあります。

<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>

if-elseステートメントの何が問題になっているのかわかりません。

ありがとう

編集

すべての素晴らしい提案に感謝します。コードが構造化されている方法は、@trebuchetによって提案された方法で機能すると思います。

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

みんなありがとう。

4

3 に答える 3

6

実際にはvalue、HTMLのselect要素でそのように使用することはできません。プロパティはありますselectedIndexが、はありませんselectedValue。ただし、 JQueryはval()select要素に実装します。

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

ストレートJavascriptでそれを行っている場合は、最初に選択したインデックスを取得し、次にoption要素から値を取得する必要があります。

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

質問に答えるために、元のコードを使用すると、Javascriptは常にelseブランチを実行します。これdocument.getElementById("analyses").valueundefined、Javascriptがブールステートメントで「false」としてタイプキャストするためです。

フィドル。

于 2012-12-05T23:42:14.883 に答える
2

コードの構造は、ページの読み込み時に1回だけ実行されます。この場合、selectの値は常に空の文字列になります。変更に対応する場合:

$("#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');
        });
     }
});
于 2012-12-05T23:46:43.207 に答える
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/

于 2012-12-05T23:47:55.223 に答える