0

問題を単純化するために、CSV を解析せずにコードを書き直しましたが、代わりにデータを保持する変数を使用しました。

--コード編集---

$(document).ready(function() {
    var qID = 'xxx';
    var source = ['text1', 'text2', 'etc3'];
    var source2 = ['text4', 'text5', 'etc6'];
    $('#question' + qID + ' input[type="text"]').change(function() {
        var validVal = 0;
        var inputVal = $(this).val();
        // Loop through the text and test the input value
        $(source).each(function(i) {
            if (inputVal == this) { // If a match is found...
                validVal = 1;
            }
        });
        // If a valid text was entered
        if (validVal == 1) { // A valid input
            alert("GOOD");
        } else { // An invalid input
            alert("NOT GOOD");
        }

        var validVal2 = 0;
        var inputVal2 = $(this).val();

       $(source2).each(function(j) {
            if (inputVal2 == this) { // If a match is found...
                validVal2 = 1;
            }
        });
        // If a valid text was entered
        if (validVal2 == 1) { // A valid input
            alert("GOOD2");
        } else { // An invalid input
            alert("NOT GOOD2");
        }
    });
});

スクリプトは 1 つのソース (var source) に対して正常に動作しますが、同じテキスト フィールド 2 つの変数 (source、source2) をチェックインして、異なるアラートを生成したいと考えています。

スクリプトはlimesurveyフォームを介して実行され、入力は単純な[type="text"]フィールドです。

同じテキスト フィールド内の 2 つの異なるテキスト配列を確認するにはどうすればよいですか?

4

1 に答える 1

2

シリーズを作成するために変数名にカウンターを付けていることに気付いたときはいつでも、立ち止まって、そこで実際に何をしているのかを考える必要があります。カウントされた変数名を作ることは常に間違っています。

配列を使用します。

var qID = 'xxx';

var source = [];
source.push(['text1', 'text2', 'etc']);
source.push(['text1', 'text2', 'etc44']);
source.push(['text15', 'text25', 'etc454']);

$('#question' + qID + ' input[type="text"]').change(function() {
    var valid = false;
    var inputVal = $(this).val();

    $.each(source, function(i, terms) {
        $.each(terms, function(i, term) {
            valid = inputVal === term;
            return !valid;  // returning false stops the .each() loop
        });
        return !valid;
    });

    if (valid) {
        alert("GOOD");
    } else {
        alert("NOT GOOD");
    }
});

上記の入れ子になったループを表現するより魅力的な方法は、 の組み込みメソッドを使用しますArray

var valid = source.some(function (terms) {
    return terms.includes(inputVal);
});

ES6 構文では、これをワンライナーにすることができます。

var valid = source.some(terms => terms.includes(inputVal));
于 2016-08-28T08:53:30.143 に答える