1

ユーザーの入力は「value1、value2、value3、valu4 ...」のようになり、value [i]-value[i-1]はたとえば0.5より大きくなければなりません。最小値は0、最大値は100です。たとえば、「0,5,10.5,20」はOKです。私の基本的なコードは

$('.click').click(function () {
    var flag = true;
    var str = $('input').val();
    var arr = str.split(',');
    if (arr.length > 1) {
        jQuery.each(arr, function (i) {
            if (arr[i] < 0 || arr[i] > 100 || arr[i + 1] - arr[i] < 0.5) {
                flag = false
            }
        });
        if (flag) {
        //main function must never start before we complete that check on all the values
            alert("OK, our function starts now. Your input is " + str)
        } else {
            alert("Please, check your input: " + str)
        }
    }
});  

これはうまくいくようですが、よくわかりません。何かが足りないのかもしれません。私の質問は、配列チェックが終了する前にメイン関数を強制的に開始しないようにする方法です。arrその中のすべての番号がチェックされる前に開始する可能性はありますか?そして、おそらくそのフラグを作成する必要はありません。それでは、この種の検証を実行するために何をしますか?

4

2 に答える 2

1

これは、メインのアルゴリズムを独自の関数に分割し、その戻り値を使用してアラートを表示する、あなたが持っているものを書き直したものです。あなたのウェブページを持っていないので、明らかにテストできませんでしたが、少し運が良ければ動作するはずです...

$(document).ready(function() {
    $('.click').click(function() {
        var str = $('input').val();
        if (inputCheck(str)) {
            //if true
            alert("OK, our function starts now. Your input is " + str);
        } else {
            alert("Please, check your input: " + str);
        }
    });
});

function inputCheck(str) {
    var arr = str.split(','),
        flag = false;
    if (arr.length > 1) {
        jQuery.each(arr, function(i) {
            if (arr[i] < 0 || arr[i] > 100 || arr[i + 1] - arr[i] < 0.5) {
                flag = false;
                return false;
                //exit loops
            } else
                flag = true;
        });
        //end each
    }//end if
    return flag;
}
于 2013-03-06T08:00:01.123 に答える
1

実行パスがチェックに合格する方法がわかりません。ただし、おそらく数値以外の値もチェックしたいので、そのネストされた関数を取り除くことができます

$('.click').click(function () {
    var str = $('input').val();
    var arr = str.split(',');
    if (arr.length > 1) {
        for(var i=0; i<arr.length; i++) {
            if (arr[i]<0 || arr[i]>100 || arr[i+1]-arr[i]<0.5 || !jQuery.isNumeric(arr[i])) {
                return alert("Please, check your input: " + str);
            }
        }
        main(str);
    }
});

function main(str) { // Just so that this *main function* exists ;)
    alert("OK, our function starts now. Your input is " + str);
}
于 2013-03-06T09:09:16.807 に答える