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)
您可以使用过滤器以及可以在任何jQuery对象上调用serialize的事实(此示例仅用于显示您只能序列化非空元素并且仅包含<input>表单中的元素):
var serialized = $('#submForm').filter(function(){
return $(this).val();
}).serialize();
Run Code Online (Sandbox Code Playgroud)
这是一个工作示例 - 将一个或多个文本框留空并单击按钮; 您将看到序列化字符串更改为仅包含非空文本框.
尝试添加这个
$('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)
| 归档时间: |
|
| 查看次数: |
16926 次 |
| 最近记录: |