Jquery-从动态表单提交中创建键值对
Jquery - Create key value pairs from dynamic form submission
我对jquery很陌生,似乎无法解决这个问题。
我需要弄清楚如何在下面的代码中从一个为表单输入提供动态值的表单中动态设置键:值对。如果我手动添加键:值对,代码就会工作,但我并不总是知道表单名称是什么,因为它们是由用户创建的。
请参阅下面代码中间部分的注释。我正在尝试使用.serialize()中的值作为$_POST值传递。
这是我目前从var formValues:中得到的值
ID=10&user_login=test9&wplp_referrer_id=&&block_unblock=u
然而,当我尝试使用提取函数中的值时
$user_id = $_POST['ID'];
$user_ID中未设置ID"10",这表明我用于传递序列化结果的语法或方法不正确。
jQuery(document).ready( function($) {
$("#wplp_edit_member").submit( function() {
var formValues = $("#wplp_edit_member").serialize(); //Get all the form input values
alert(formValues); //Check form values retrieved for testing only
var numbers = /^[0-9]+$/;
// Validate fields START
var wplp_referrer_id = $("#wplp_referrer_id").val();
if( !wplp_referrer_id.match(numbers) ) {
alert("Please enter a numeric value");
return false;
}
// Validate fields END
$("#ajax-loading-edit-member").css("visibility", "visible");
// Post data to ajaxurl
$.post(ajaxurl, {
action: "wplp_edit_member", //Call the PHP function to update/save form values
data: formValues, //Use data to pass form field values as $_POST values to the function above
// No More manual inputs of form fields to be passed
//ID:$("#ID").val(),
//user_login:$("#user_login").val(),
//wplp_referrer_id:$("#wplp_referrer_id").val(),
//block_unblock:$("#block_unblock").val(),
},
// Success
function(data) {
$("#ajax-loading-edit-member").css("visibility", "hidden");
//alert("Member Updated");
//document.location.reload();
}
);
return false;
});
});
谢谢!
如果您想将数据发布为json,可以使用$.fn.serialize()的变体,添加jquery扩展
$.fn.serializeObject = function()
{
var o = {};
var a = this.serializeArray();
$.each(a, function() {
if (o[this.name]) {
if (!o[this.name].push) {
o[this.name] = [o[this.name]];
}
o[this.name].push(this.value || '');
} else {
o[this.name] = this.value || '';
}
});
return o;
};
并将其用作
var data = $('#some-form').serializeObject(); //the dynamic form elements.
data.action = "wplp_edit_member";
$.post(ajaxurl, data, function(data) {
$("#ajax-loading-edit-member").css("visibility", "hidden");
//alert("Member Updated");
//document.location.reload();
});
如果发布json不是您的要求,$.fn.serializeArray可以工作。
希望这能有所帮助。
您想要的是向javascript对象动态添加属性。如何做到这一点在网上随处可见,但也在这里演示:
是否可以将动态命名的属性添加到JavaScript对象中?
因此,在您的情况下,您应该在调用.post
:之前先设置对象
var formData = {};
for (...) {
formData[...] = ...;
}
$.post(ajaxurl, formData, function (data) {
...
});
完成上述迭代的一种方法是只从<form>
标签之间的所有输入中收集值:
$('form input').each(function ($input) {
formData[$input.attr('name')] = $input.val();
});
有很多方法可以剥这只猫的皮。此外,jQuery有很多插件在这里可能会有所帮助,尽管通常是YAGNI(你不会需要它),所以只有KISS(保持简单,愚蠢)。
以下是我根据@shakib 提供的代码获得的解决方案
jQuery(document).ready( function($) {
$("#wplp_edit_member").submit( function() {
var numbers = /^[0-9]+$/;
var wplp_referrer_id = $("#wplp_referrer_id").val();
// Validate fields START
if( !wplp_referrer_id.match(numbers) ) {
alert("Please enter a numeric value");
return false;
}
// Validate fields END
$("#ajax-loading-edit-member").css("visibility", "visible");
// Convert to name value pairs
$.fn.serializeObject = function(){
var o = {};
var a = this.serializeArray();
$.each(a, function() {
if (o[this.name]) {
if (!o[this.name].push) {
o[this.name] = [o[this.name]];
}
o[this.name].push(this.value || '');
} else {
o[this.name] = this.value || '';
}
});
return o;
};
var data = $('#wplp_edit_member').serializeObject(); //the dynamic form elements.
data.action = "wplp_edit_member";
$.post(ajaxurl, data, function(data) {
$("#ajax-loading-edit-member").css("visibility", "hidden");
//alert("Member Updated");
//document.location.reload();
});
return false;
});
});
如果您理解Jquery/Javascript,这实际上是一个非常简单的实现;o)
感谢大家的投入!
相关文章:
- 正在数组中存储键值对
- 如何将新的键/值对元素添加到现有数组
- 在键值对中对求和值进行下划线
- 返回由键/值对定义的数组
- 在url参数javascript中存储键值对列表
- 将数组转换为键值对
- jQueryAJAX-将额外的键/值对推送到序列化的$_POST数组中
- 使用jQuery从ajax调用访问键值对
- 将动态键值对传递给函数
- d3使用键值对对对多个值的数据进行分组
- 在动态 JavaScript 对象(键/值对)中创建动态数组
- 在JavaScript中创建键/值对列表
- Jquery-从动态表单提交中创建键值对
- 创建dictionary,将数组作为键值对中的值:javaScript
- 如何在JavaScript中为键/值对创建动态键?
- 使用jQuery从过滤器菜单创建键/值对
- 如何在JavaScript中创建键/值对列表
- 数据结构关联列表-如何创建头键值对
- 用于从两个对象属性创建键值对的函数
- 为对象创建键:值对,同时循环并为每个对象设置变量