jQuery序列化如何消除空字段

Die*_*oP. 4 jquery serialization

在此表单中,用户可以为作者添加一些信息(音乐,歌词作者)

用户可以选择添加1个或更多作者.

问题是,当用户只输入1个作者时,所有其他输入都保持为空,但jQuery序列化函数将把它们放在URL中,服务器给我这个错误:

Request-URI Too Large
Run Code Online (Sandbox Code Playgroud)

见下面的例子:

echo "<form action=\"\" id=\"submForm\" name=\"submForm\" method=\"get\">";
// AUTHOR NUMBER 1
echo "<p><span class=\"labelInput\">".(_t('_cR_name'))." </span><input id=\"nameAuthor\" name=\"author[0][name]\" value=\"\" type=\"text\" class=\"commonInput\"></p>"; 
echo "<p><span class=\"labelInput\">".(_t('_cR_DOB'))." </span><input id=\"DOBAuthor\" name=\"author[0][DOB]\" value=\"\" type=\"text\" class=\"littleInput\"></p>"; 
echo "<p><span class=\"labelInput\">".(_t('_cR_DOD'))." </span><input id=\"DODAuthor\" name=\"author[0][DOD]\" value=\"\" type=\"text\" class=\"littleInput\"></p>"; 
// AUTHOR NUMBER 2
echo "<p><span class=\"labelInput\">".(_t('_cR_name'))." </span><input id=\"nameAuthor\" name=\"author[1][name]\" value=\"\" type=\"text\" class=\"commonInput\"></p>";
echo "<p><span class=\"labelInput\">".(_t('_cR_DOB'))." </span><input id=\"DOBAuthor\" name=\"author[1][DOB]\" value=\"\" type=\"text\" class=\"littleInput\"></p>"; 
echo "<p><span class=\"labelInput\">".(_t('_cR_DOD'))." </span><input id=\"DODAuthor\" name=\"author[1][DOD]\" value=\"\" type=\"text\" class=\"littleInput\"></p>"; Death:
// AUTHOR NUMBER 3
echo "<p><span class=\"labelInput\">".(_t('_cR_name'))." </span><input id=\"nameAuthor\" name=\"author[2][name]\" value=\"\" type=\"text\" class=\"commonInput\"></p>"; 
echo "<p><span class=\"labelInput\">".(_t('_cR_DOB'))." </span><input id=\"DOBAuthor\" name=\"author[2][DOB]\" value=\"\" type=\"text\" class=\"littleInput\"></p>"; 
echo "<p><span class=\"labelInput\">".(_t('_cR_DOD'))." </span><input id=\"DODAuthor\" name=\"author[2][DOD]\" value=\"\" type=\"text\" class=\"littleInput\"></p>"; 
echo "</form>"; 
Run Code Online (Sandbox Code Playgroud)

这是jQuery代码(它还包含一个验证函数,我在jQuery 1.3.2上)

echo "<script type=\"text/javascript\">
$(document).ready(function() {
 $('#submForm').validate({   
  submitHandler: function(form) {
  var serialized = $('#submForm').serialize()
  $.get('".$site['url']."modules/yobilab/copyright/classes/DO_submission.php', serialized);
    window.setTimeout('location.reload()', 8000);
return false;
  form.submit();    
  } 
})
});
Run Code Online (Sandbox Code Playgroud)

现在假设用户只输入AUTHOR 1的字段,并将AUTHOR 2和AUTHOR 3留空.我怎么说jQuery序列化函数只包含在URL中输入的字段,而不包括空字段?

Fra*_*wis 12

我刚遇到同样的问题,但形式却截然不同.我不喜欢这里的几个答案如何删除表单元素,您可以在表单提交之前看到页面上删除的元素.其他人克隆了表格,其中一个表格没有为我返回任何结果.

所以我最终得到了这个:

$('#submForm').find('input').not('[value=""]').serialize();
Run Code Online (Sandbox Code Playgroud)

在我的例子中,上面的代码适用于我选择的菜单以及输入字段.

这正是我使用的:

$('#search').find('input, select').not('[value=""], [value="0"], [value="DESC"]').serialize();
Run Code Online (Sandbox Code Playgroud)

所以它只提取具有数据而不是任何默认值的表单字段.我很想知道这是否可以进一步优化.


小智 9

我正在使用的是什么

$("form").serialize().replace(/[^&]+=&/g, '').replace(/&[^&]+=$/g, '')
Run Code Online (Sandbox Code Playgroud)


no.*_*ing 5

您可以使用过滤器以及可以在任何jQuery对象上调用serialize的事实(此示例仅用于显示您只能序列化非空元素并且仅包含<input>表单中的元素):

var serialized = $('#submForm').filter(function(){
                    return $(this).val();
                }).serialize();
Run Code Online (Sandbox Code Playgroud)

这是一个工作示例 - 将一个或多个文本框留空并单击按钮; 您将看到序列化字符串更改为仅包含非空文本框.


ami*_*t_g 1

尝试添加这个

$('input', '#submForm').each(function(){
    $(this).val() == "" && $(this).remove();
})
Run Code Online (Sandbox Code Playgroud)

或者

$('input:text[value=""]', '#submForm').remove();
Run Code Online (Sandbox Code Playgroud)

var serialized = $('#submForm').serialize()
Run Code Online (Sandbox Code Playgroud)