jquery.form插件中動態修改表單數據


jquery.form

jquery.form插件(http://malsup.com/jquery/form/)是大家經常會用到的一個jQuery插件,它可以很方便將表單轉換為ajax的方式進行提交。以下是官網給出的一個栗子:

$(document).ready(function() {

var options = {

target: '#output1', // target element(s) to be updated with server response

beforeSubmit: showRequest, // pre-submit callback

success: showResponse // post-submit callback

};

$('#myForm1').ajaxForm(options);

});

function showRequest(formData, jqForm, options) {

var queryString = $.param(formData);

alert('About to submit: \n\n' + queryString);

return true;

}

function showResponse(responseText, statusText, xhr, $form) {

alert('status: ' + statusText + '\n\nresponseText: \n' + responseText +

'\n\nThe output div should have already been updated with the responseText.');

}

再看以下需求:

假設我想在用戶點擊submit按鈕的時候,對表單中的某些數據進行動態的修改,例如要對密碼字段進行加密處理,然后才發送給服務器。這時候,我們可能想到可以在beforeSubmit的回調函數(showRequest)中進行處理,例如像這個樣子:

function showRequest(formData, jqForm, options) {

var jform = jqForm[0];

var password= jform.password.value;

password=encrypt(password); //加密密碼

$("#password").val(password);

alert($("#password").val()); //檢驗一下輸入框的內容是否發生了改變

return true;

}

通過上面的代碼,我們提交表單的時候很順利彈出了我們期待的加密后的密碼,表明表單內容已經被我們成功修改,但當我們以為一切都很順利的時候,發現提交到服務器的密碼依然是沒有加密的密碼?咋回事??

原因是:我們的修改晚了!!

因為,在執行beforeSubmit之前,jquery.form已經完成了表單數據的串行化處理,也就是說,你無論如何修改表單內容,其實都不影響串行化的結果。(就是jquery.ajax方法中的data數據)

那么,有沒有辦法呢?當然有啦,因為jquery.form早就為我們准備了另一個回調接口:beforeSerialize

我們只要將上述修改表單數據的過程挪到beforeSerialize的回調函數中,就可以在表單串行化之前對數據進行動態的修改。

看一下官網的表述:

  • beforeSerialize

    Callback function to be invoked before the form is serialized. This provides an opportunity to manipulate the form before it's values are retrieved.

  • beforeSubmit

    Callback function to be invoked before the form is submitted. The 'beforeSubmit' callback can be provided as a hook for running pre-submit logic or for validating the form data. If the 'beforeSubmit' callback returns false then the form will not be submitted.

很清楚看到,beforeSerialize可以在表單的數值被獲取之前對數據進行處理。而beforeSubmit則是在提交之前對已經獲取的數據進行校驗。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM