2016-07-29 11 views
2

私は非常に基本的なif-thenコードをselect文に基づいて実行しようとしていますが、動作していないようです。私は、ウィンドウがロードされるとすぐにイベントリスナーを作成しましたが、それは私が追加したconsole.logステートメントに基づいて一度だけ実行されているようです。私のイベントリスナーは一度だけトリガーされ、エラーのないコードを実行していませんか?

私はselectの中の別のオプションに変更すると、値が変更されるか、または何が選択されているかに応じてプロンプトが表示されると思います。代わりに、何も起こっていない。

JS Hintでコードを実行して小さなエラーを見つけましたが、Chromeのコンソールでもエラーが発生していません。

私が選択したオプションの値を取得する方法を覚えしようとするこの回答を見てきました:Get selected value in dropdown list using JavaScript?

セレクトコード:

<select name="type_of_service" id="type_of_service"> 
        <option selected="selected">Choose one...</option> 
        <option value="optgroup_1">Every time</option> 
        <option value="optgroup_2" name="trigger-describe_interval">On an interval...</option> 
        <option value="optgroup_3">Completely optional</option> 
       </select> 

のJavascript機能&イベントリスナー:

// The following is a list of event listeners. We need to start it off with a making sure the body has loaded first. 

window.addEventListener("load", function() { 
    console.log("Checkpoint 1"); 
    // Add more listeners here... 
    var type_of_service = document.getElementById("type_of_service"); 
    type_of_service.addEventListener("change", trigger_describe_interval()); 
}); 
// This funciton is for the selector, with the ID of type_of_service 

function trigger_describe_interval() { 
    console.log("Checkpoint 2"); 
    var selected_object = document.getElementById('type_of_service'); 
    var current_value = selected_object.options[selected_object.selectedIndex].value; 
    // So now we've aquired the value of the select. 
    // If the value is optgroup_1, then change the described_interval to 3500 miles 
    if (current_value == "optgroup_1") { 
    document.getElementById('described_interval').value = "1"; 
    } 
    // Otherwise, if the option is optgroup_2 then ask for an interval 
    else if (current_value == "optgroup_2") { 
    // create a prompt varible 
    var response = prompt("Enter the interval in miles. For example, if you would like this service to be used every 3500 miles, enter '3500'"); 
    // Ensure that this is a integer 
    if (response !== parseInt(response, 10)) { 
     // So now it's not a number, tell them that 
     response = window.alert("Sorry, but \"" + response + "\"is not a valid entry. Please try again. "); 
     // loop back 
     trigger_describe_interval(); 
     // abort this version of the function 
     return false; 
    } 
    } 
} 
+1

問題の関連コードを投稿してください。 – imtheman

+1

この質問は、後で存在しないかもしれないどこかへのリンクだけでなく、質問自体に関連するコードを追加することによって改善することができます。 – scrappedcola

+1

また、問題はこの 'type_of_service.addEventListener(" change "、trigger_describe_interval());'であり、 'type_of_service.addEventListener(" change "、trigger_describe_interval);' – imtheman

答えて

2

この関数呼び出しからかっこを削除してみてください。

そのよう

type_of_service.addEventListener("change", trigger_describe_interval());

type_of_service.addEventListener("change", trigger_describe_interval);

あなたが内部の関数にパラメータを渡す必要がある場合は、以下を実行していることを達成することができます:

type_of_service.addEventListener("change", function() { 
    trigger_describe_interval(param1, param2); 
}); 

EDIT:上記のコメントのimthemanは、私の答えの直前にかっこを取り除くことについても言及しています。

+0

イベントリスナーでこの関数に変数を渡したい場合は不可能ですか? – ilarsona

+2

@ilarsona:これは可能です: 'abc.addEventListener(" change "、function(){myFunction(param1、param2)});' – Santi

+0

うれしい! – Santi

関連する問題