jquery:如何在提交之前从表单中删除空白字段?
我有一个页面,上面有一组表单,用于 API 测试。由于不值得解释的原因,我通常不想在向服务器提交的内容中包含空字段。提交前如何删除数据中的空白字段?
例如,如果我有一个包含两个字段(foo 和 bar)的表单,并且用户将 bar 留空,我希望服务器看到提交,就好像唯一的字段是 foo 一样。
我的第一次尝试涉及使用 jquery 循环遍历字段
$("form").submit(function() {
$(this).children(':input').each(...)
}
并删除字段。但a)不起作用,b)似乎会从页面上的可见表单中删除该字段,这不是我想要的。
另一种方法可能是循环遍历字段并使用具有除“”之外的值的字段手动构造提交字符串。那行得通吗?还有更好的想法吗?
I have a page with a set of forms on it, used for API testing. For reasons not worth explicating, I generally don't want to include empty fields in the submission to the server. How do I delete empty fields from the data before submitting?
For example, if I have a form with two fields, foo and bar, and the user leaves bar blank, I want the server to see the submission as if the only field were foo.
My first stab at that involved looping through the fields using jquery with
$("form").submit(function() {
$(this).children(':input').each(...)
}
And removing the field. But that a) didn't work, and b) seems like it would delete the field from the visible form on the page which is not what I want.
Another approach might be to loop through the fields and construct the submit string manually with fields that have values other than "". Will that work? Any better ideas?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
一种方法是在这些字段上设置“禁用”属性,这会阻止它们的值被序列化并发送到服务器:
如果您有客户端验证,您还需要在事件中重新启用这些字段验证失败:
编辑:修复了错误
One way would be to set the "disabled" attribute on those fields, which prevents their values from being serialized and sent to the server:
If you have client-side validation, you'll also want to re-enable these fields in the event of a validation failure:
EDIT: repaired bug
将此处的答案与有关查找空输入的问题结合起来我得出了这个解决方案。
因此,从 @Luke 的解决方案开始,添加他使用 find 而不是 child 的建议(我的表单位于表格中),然后使用 @gdoron 的过滤技术来隔离空元素。
Combining the answers here, with this question regarding finding empty input I arrived at this solution.
So starts form @Luke's solution, adds his suggestion of using find instead of children (my form is in a table), and then uses @gdoron's filter technique to isolate the empty elements.
我通常会同意@Luke,但下面的解决方案应该处理任何空值,无论它是否是输入标签,只要记住在所有表单子元素上添加名称属性(如果您希望它们被序列化) ;
HTML:
jQuery:
I generally will just agree with @Luke, but the solution below should take care of any empty value regardless if it is an input tag or not, just remember to add a name property on all your form children elements if you want them to get serialized;
The HTML:
The jQuery:
投票最高的答案对我不起作用。我认为选择器不够具体。这对我有用:
The top voted answer did not work for me. I believe the selectors weren’t specific enough. Here's what worked for me:
删除提交时的空字段
结合多个功能和主观样式,特别是:
.find()
变为比.children()
更深。.val() === ''
适用于 textarea 和 更改了属性,[value=""]
没有。.prop()
超过.attr()
。Removing empty fields on submit
Combining several features and subjective styles, especially:
.find()
goes deeper than.children()
..val() === ''
works for textarea and changed attributes,[value=""]
does not..prop()
over.attr()
.添加卢克·丹尼斯接受的答案。如果有人使用 Python/Django 框架,如果您使用 django-filters 应用程序,此脚本可能会有所帮助。在此示例中,我有多个具有输入和选择器 html 元素的过滤器。但是,该脚本也适用于单输入过滤器和多选过滤器。
Adding to Luke Dennis accepted answer. In case someone uses the Python/Django framework this script might help if you use the django-filters app. In this example I had multiple filters that had an input and selector html element. However, the script also worked on single input filters as well as multiplechoice filters.
也许不是最好的解决方案,但这应该是实现您想要的目标的快速而简单的方法然后
,如果您使用 vlient 端验证或通过 ajax 发布,那么您需要将 name 属性设置回来,以便下一次提交可以工作正确地...
Maybe not the best solution but this should be a quick and easy way to achieve what you're after
Then if you are using vlient side validation or are posting via ajax, then you need to set the name attribute back so the next submission will work correctly...