2013-05-06 26 views
2

我想获得一些客户端验证工作,以防止发生表单提交如果一个对象没有价值。我已经在这一段时间了,但不能得到满意的解决方案。防止Ajax表单提交没有内容

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

回答

3

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

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

增加的return允许提交取消,如果确实返回false(这是可能的checkTextObjHasValue在一定条件下)。

从技术上讲,它本来可以工作,如果你从checkTextObjHasValue返回的功能,但我认为这种方式是一个更清洁。它可以让你自定义它,以防你想验证几个字段。

UPDATE:

喜欢插件的文档中,你可以采取这种做法:

beforeSubmit: beforeSubmitHandler, 

,然后分别定义一个函数是这样的:

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

但是,该文档是误导http://malsup.com/jquery/form/#ajaxForm – hop 2013-05-06 19:27:21

+0

@hop你为什么这么说?该示例显示了一个函数引用。如果有一个函数被调用(如在OP中),那么我会理解混淆。另外,http://malsup.com/jquery/form/#options-object表示'beforeSubmit'的“回调函数”。当你打电话时,函数不会奇迹般地返回函数。我不确定你的观点 - 如果文档以任何方式误导,那不是我的错 – Ian 2013-05-06 19:29:09

+0

我从来不认为它是你的错。只是想学习,我很困惑。从你的解释,我会再看看文档。 – hop 2013-05-06 19:33:21