0

私には機能があります

function Choice(options) {
wait()
    function wait(){ // only proceed after a selection is made;
        selection = parseInt(selectedchoice);

        if (selection < 1){

            setTimeout(wait,1000);

            console.log("Not chosen yet");

            selection = parseInt(selectedchoice);

        } 
        else if (selection == 1 || selection == 2){

            // Finding what the user selected
            for (var i in options.choices) {
                m++
                if (m === selection){
                    //console.log("PICK IS " + i);
                    pick = i;
                    break
                }
            }
            console.log(options.choices[pick].condition)
            if (selection >= options.choices.length || selection <= 0 || options.choices[pick].condition === false ) {
                selection = 0;
                //Choice(options);
                console.log("Invalid selection");
//USE MAGIC HERE


            }
            else {
                   console.log("Valid selection");
            }
        }
    }
}

ユーザーが無効な選択を選択した場合は、そのことを通知し、もう一度選択するために少し戻します。選択を 0 にリセットした後でも、関数 Choice(options) を再度呼び出すと、無限再帰が発生するようです。throw と同じです (ただし、適切な使用方法はわかりません)。

問題は、エラーが発生した場合にプログラムに Choice() 関数を再度実行させる方法です。

4

2 に答える 2

0

この問題に対するあなたのアプローチは間違っていると思います。setTimeout値の変更を「監視」するために使用しないでください。代わりに、イベントによって駆動されるロジックを作成する必要があります。

この特定の例では、change[ doc ] イベント ハンドラーを select 要素にアタッチします。イベント ハンドラーが呼び出されるたびに、select 要素の値が変更されていることが確実にわかり、それに応じてユーザーの選択に対してアクションを実行できます。例えば、

HTML:

<select id="select" onchange="onSelectChange()">
    <option value="0">Please choose...</option>
    <option value="1">Value 1</option>
    <option value="2">Value 2</option>
</select>

JS:

function onSelectChange() {
    var selection = document.getElementById('select').value;

    if (/* selection is valid */) {
        // do whatever you need to do for a vaild selection
    } else {
        // selection is invalid, you want to notify user invalid
        // selection by using "alert" or something like that, and
        // you're DONE!
    }
}

このようにして、選択が無効な場合、ユーザーは再度選択することができ、ユーザーが別の選択を行うと、ハンドラー再度実行されます。

于 2013-06-23T14:56:17.010 に答える