我目前在ajax请求中使用form.serialize()
来提交联系表单,但我的问题是form.serialize()
抓取所有表单元素,包括“按钮”。
示例表单:
name (input type = text)
email (input type = text)
body (text area)
submit (input type = button)
clear (input type = reset)
我只想序列化不属于BUTTON,RESET或PASSWORD类型的表单元素。
有一个简单的解决方案吗?
答案 0 :(得分:3)
我希望如果省略按钮输入上的name参数,按钮将不会被序列化。我的期望是基于这样一个事实,即序列化应该模仿表单在提交时序列化的方式,而没有名称的输入不会作为表单参数发送。我编写了一个简单的测试,似乎表明了这一点。单击“检查”按钮,您将获得“text = bob”。切换一个复选框,你会得到“cb2 = on& text = bob”。永远不会包含提交按钮值。
<script type="text/javascript">
$(document).observe('dom:loaded', function() {
$('btn').observe('click', function() {
alert($('form').serialize());
return false;
});
});
</script>
</head>
<body>
<form id='form'>
Checkbox 1 <input type="checkbox" id="cb1" name="cb1" />
Checkbox 2 <input type="checkbox" id="cb2" name="cb2" /><br />
<input type='text' name='text' value='bob' />
<input type="submit" id="btn" value="Examine" />
</form>
答案 1 :(得分:0)
这是一个疯狂的猜测,可能不是唯一的解决方案,但我正在考虑的一种方式是:
$('YOUR_FORM_ID').getElements()
Enumerable.reject
Form.serializeElements
在代码中,类似这样的事情可能会:
Form.serializeElements(
// We need the list of all elements
// that are not rejected by the inner function
$('YOUR_FORM_ID').getElements().reject(function (formElement) {
// this function must return :
// - true for an element that you want to keep
// - false for an element you don't want to keep (you have to return false for your buttons, for instance)
if (formElement.type == 'radio' || formElement.type == 'checkbox') {
return false;
} else {
return true;
}
})
);
输出(你当然想把它捕获到一个变量中),是这样的:
"lol=15&dt=0"
和/或如果您想获取哈希/对象而不是查询字符串,则可以使用Form.serializeElements
的第二个可选参数。
注意:对于这个例子,我没有过滤掉你指定的元素:我用来测试的表单并不完全符合你的要求,所以我过滤掉了其他一些东西..
因此,您必须调整函数中的条件。
希望这有帮助;玩得开心!