我正在尝试让一些客户端验证工作,以防止在对象没有值时发生表单提交。我已经暂时搁置了一段时间,但无法得到满意的解决方案。
我的表单提交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:在加载页面时执行回调并仅在实际表单提交时执行?
答案 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.');
}