我正在尝试使用Ajax处理表单,但在处理复选框时遇到了问题。我想我可以在数组中创建一个数组,将复选框添加到数据对象中,但这似乎不起作用。它不会显示为控制台中对象的一部分或类似的内容。我试了几个变体,但都没用。这就是目前的情况:
var formData = {
'fname' : $('input[name=fname]').val(),
'lname' : $('input[name=lname]').val(),
'phone' : $('input[name=phone]').val(),
'email' : $('input[name=email]').val(),
'sqft' : $('select[name=sqft]').val(),
'checked': $('input[name=services[]]:checked').each(function(){
checked.push($(this).val());
});
};
我知道我可以使用serialize()
,但老实说,我只是不熟悉处理该方法中的数据。由于我需要用PHP
处理数据,我想坚持我所知道的。
这是复选框的标记:
<div class="checks span6">
<p>Check which services you are interested in:</p><br>
<input type="checkbox" name="services[]" value="janitorial"><p>Janitorial</p><br>
<input type="checkbox" name="services[]" value="window"><p>Window cleaning</p><br>
<input type="checkbox" name="services[]" value="carpet"><p>Carpet service</p><br>
<input type="checkbox" name="services[]" value="restroom"><p>Restroom sanitation</p><br>
<input type="checkbox" name="services[]" value="facility"><p>Facility Maintenance</p><br>
<input type="checkbox" name="services[]" value="floors"><p>Floor strippin & re-waxing</p><br>
<input type="checkbox" name="services[]" value="moving"><p>Move in or move out</p><br>
<input type="checkbox" name="services[]" value="other"><p>Other</p><br>
</div>
当前发布的代码中存在语法错误,在为each
方法关闭)
之后额外出现;
。您还应该转义name属性值的[]
部分,或者在选择器中将其用引号括起来。除此之外,您存储的是一个jQuery对象,而不是一个选定值的数组。您可以使用map
方法。
'checked': $('input[name="services[]"]:checked').map(function(){
return this.value;
}).get()
如果你愿意学习新想法,下面是如何使用.serialize()
——非常直接,服务器端(PHP)上的任何东西都不需要更改:
var formData = $('form').serialize(); //THAT's it!!
在您的情况下,这将产生以下query string
——已经进行了URL编码——这就是您当前的数据在POST
ing之前将转换为的内容:
services%5B%5D=janitorial&services%5B%5D=window&services%5B%5D=carpet&services%5B%5D=restroom&services%5B%5D=facility