0

すべてのテキスト入力フィールドが入力されるようにフォームを検証したいと思います。そのために、以下の関数を作成しましたが、問題は常に確認済みのメッセージが表示されることです。一部のフィールドを空のままにすると、空のアラートと確認済みのアラートの両方が表示されます。

あなたが助けたり、より良い方法を提案したりしてください。

function validate() {
    $("#myform :text").each(function(){
        if($.trim(this.value).length==0){
            alert("Empty!");
            return false;
        }
    });
    return 1;
}
$(document).on('click','#addnew',function() {
    if(validate() != 1){
        return false;
    }
    alert('Verified.');
});
4

4 に答える 4

5

はループreturn false;から出るだけです。$.each()ループに変数を設定して、それを返す必要があります。

function validate() {
    var ret = true;
    $("#myform :text").each(function(){
        if($.trim(this.value).length==0){
            alert("Empty!");
            ret = false;
            return false;
        }
    });
    return ret;
}

次に、ハンドラーを適切に変更する必要がありますclick(-1の代わりにboolを使用します)。

于 2013-03-25T18:07:34.483 に答える
1

コードでは、空のフィールドの後に入力されたフィールドがあると、関数は1を返します。これを回避するには、trueとして定義されている変数を作成し、フィールドが空の場合はfalseに設定します。

function validate() {
    var isValid = true;
    $('#myform :text').each(function () {
        if($.trim(this.value).length === 0){
            alert('Empty!');
            isValid = false;
        }
    });
    return isValid;
}
$(document).on('click', '#addnew', function () {
    var isValid = validate();
    if (isValid) {
        return false;
    }
    alert('Verified.');
});
于 2013-03-25T18:09:39.423 に答える
1

関数から早期にreturnを試みる代わりに、failという変数を返すようにコードを変更しました。うまくいくはずです:

 function validate() {
    var fail = false;
    $("#myform :text").each(function(){
        if($.trim(this.value).length==0){
            alert("Empty!");
            fail = true;
            return false;
        }
    });
    return !fail;
}
$(document).on('click','#addnew',function() {
    if(validate()){  
        return false;
    }
    alert('Verified.');
});
于 2013-03-25T18:09:51.963 に答える
0

まず、アラートの代わりにJavaScriptのデバッグにconsole.logを使用する方が簡単だと思います(スクリプトの実行がブロックされないため、タイミングが少しわかりやすくなります)。

したがって、validate関数が実際に-1を返すことはなく、falseを返すようです。このため、クリック関数での比較が真になることはありません。つまり、「検証済み」です。アラートは常に表示されます。

于 2013-03-25T18:07:41.687 に答える