我想覆盖"密码的价值"使用AjaxSubmit函数在Jquery上提交表单之前的字段。 我知道我可以只更新输入字段的值,但是,我不希望用户看到这种转换。换句话说,我只想将自定义值发送到密码字段并将当前值保留在屏幕上...
我怎么能这样做?
我目前的代码:
var loginoptions = {
success: mySuccessFuction,
dataType: 'json'
}
$('#My_login_form').submit(function(e) {
e.preventDefault();
var pass=$("#My_login_form_password").val();
if (pass.length>0){
loginoptions.data={
password: ($.sha1($("#My_login_form_csrf").val()+$.sha1(pass)))
}
$("#My_login_form").ajaxSubmit(loginoptions);
delete loginoptions.data;
});
此代码的问题在于它正在发送密码"带有表单字段值的POST变量,以及带有我设置的值的重复变量" loginoptions.data"。
答案 0 :(得分:2)
基于克里斯蒂亚诺的回答,我能够让它发挥作用。如果您使用:beforeSubmit()
,则更改后的值不会发布,但如果您使用:beforeSerialize()
,则会过帐更改后的值。
$('#ff').ajaxForm({
beforeSerialize:function(jqForm, options){
var serializedForm = decodeURIComponent(jqForm.serialize());
options.data = serializedForm.deserializeToObject();
options.data.tPassword = MD5($("#tPassword").val())
},
success:function(data){
// do stuff
}
});
答案 1 :(得分:0)
如果你想做任何事情,那么我认为你可以使用回调函数beforeSubmit: function(contentArray, $form, options){}
beforeSubmit: function(contentArray, $form, options){
for(var i=0; i<contentArray.length; i++){
if(contentArray[i].name == "password") {
contentArray[i].value = ($.sha1($("#My_login_form_csrf").val()+$.sha1(pass)))
}
}
}
答案 2 :(得分:0)
似乎ajaxSubmit在表单上使用了jquery的 serialize()函数,然后添加了序列化的额外数据。所以,如果我有一个名为“password”的字段,其值为“1234”,然后尝试将其更改为“abcd”,使用“loginoptions.data.password”,它将序列化所有内容并将“options.data”设置为这个:
"password=1234&field_2=value_2&password=abcd"
经过多次尝试,我放弃了使用ajaxSubmit函数并决定使用ajax函数提交表单:
var the_form=$('form#My_login_form');
loginoptions.url=the_form.attr("action");
loginoptions.type=the_form.attr("method");
var serializedForm=decodeURIComponent(the_form.serialize());
loginoptions.data=serializedForm.deserializeToObject();
var pass=$("#My_login_form_password").val();
if (pass.length>0){
loginoptions.data.password= ($.sha1($("#My_login_form_csrf").val()+$.sha1(pass)));
}
$.ajax(loginoptions);
这是 deserializeToObject()函数:
function deserializeToObject (){
var result = {};
this.replace(
new RegExp("([^?=&]+)(=([^&]*))?", "g"),
function($0, $1, $2, $3) { result[$1] = $3; }
)
return result;
}
String.prototype.deserializeToObject = deserializeToObject;