2013-05-06 23 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