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 回答