2

オブジェクトに値がない場合にフォーム送信が発生しないように、クライアント側の検証を機能させようとしています。私はしばらくこれに取り組んできましたが、満足のいく解決策を得ることができません。

私のフォーム送信 Js は次のようになります。

$(document).ready(function () {

    $('#localUsersDateTime').val(setLocalDateTime());

    $('#createentry').ajaxForm({
        beforeSubmit: checkTextObjHasValue($('#newentry'), 'You need to add some text.'),
        dataType: 'json',
        success: function (result) {
            $('#entries-list').prepend('<li>' + $('#newentry').val() + '</li>');
            $('#newentry').val('').blur();
        },
        error: function (xhr)
        {
            try {
                var json = $.parseJSON(xhr.responseText);
                alert(json.errorMessage);
            } catch (e) {
                alert('Oops, Something very bad has happened');
            }
        }
    });
    return false;
});

ただし、ページが読み込まれると、 beforeSubmit: 関数で指定された checkTextObjHasValue() が実行されるため、チェックは実際のフォーム送信時にのみ実行する必要があります。

function checkTextObjHasValue(obj, message) {

    if ($(obj).val() === '') {
        alert(message);
        return false;
    }

    return true;
}

この beforeSubmit: コールバックが、ページをロードするだけで実行され、実際のフォーム送信時にのみ実行されるのを防ぐにはどうすればよいですか?

4

1 に答える 1

3

このbeforeSubmitオプションは、関数への参照を想定しています。あなたはすぐに関数を呼び出していました。これを使用してみてください:

beforeSubmit: function () {
    return checkTextObjHasValue($('#newentry'), 'You need to add some text.');
},

が実際に返さreturnれた場合に、送信をキャンセルできるように追加されました (これは、特定の条件下で可能です)。falsecheckTextObjHasValue

技術的には、 から関数を返せばうまくいくかもしれませんcheckTextObjHasValueが、この方法の方が少しきれいだと思います。また、複数のフィールドを検証する場合に備えてカスタマイズできます。

アップデート:

プラグインのドキュメントと同様に、次のアプローチを取ることができます。

beforeSubmit: beforeSubmitHandler,

そして、次のように関数を個別に定義します。

function beforeSubmitHandler() {
    return checkTextObjHasValue($('#newentry'), 'You need to add some text.');
}
于 2013-05-06T19:21:06.660 に答える