在没有内容的情况下防止Ajax表单提交

时间:2013-05-06 19:18:00

标签: javascript jquery ajax model-view-controller ajaxform

我正在尝试让一些客户端验证工作,以防止在对象没有值时发生表单提交。我已经暂时搁置了一段时间,但无法得到满意的解决方案。

我的表单提交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:在加载页面时执行回调并仅在实际表单提交时执行?

1 个答案:

答案 0 :(得分:3)

beforeSubmit选项需要对函数的引用。你立即调用了一个函数。试试这个:

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

添加的return允许在实际返回false时取消提交(在checkTextObjHasValue某种情况下可以提交)。

从技术上讲,如果你从checkTextObjHasValue返回一个函数,可以工作,但我认为这种方式更清晰一些。它允许您自定义它,以防您想要验证多个字段。

<强>更新

与插件的文档一样,您可以采用以下方法:

beforeSubmit: beforeSubmitHandler,

然后单独定义一个函数:

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