jQuery表单序列化有bug,并且不一致
Buggy jQuery form serialize, and inconsistency
我在提交表单时看到一些奇怪的不一致,并且通过ajax与.serialize()
提交表单。下面是一个简单的例子:
<html>
<body>
<form action="somewhere">
<select name="thing">
<option value="volvo">Volvo</option>
<option value="saab">Saab</option>
<option value="mercedes">Mercedes</option>
<option value="subaru" selected="selected">Subaru</option>
</select>
<input type="text" name="name" value="val">
<button type="submit" name="thing" value="save" >Click me</button>
</form>
<script src="https://code.jquery.com/jquery-1.11.1.js"></script>
<script>
var $ = jQuery;
$('form').on('submit', function(evt) {
//evt.preventDefault();
console.log($('form').serialize());
console.log($('form').clone().serialize());
});
</script>
</body>
</html>
当您第一次进入页面,更改选择框和文本时,您将在网络控制台(浏览器提交)和日志控制台(jQuery序列化)中看到两种方法中输入的文本是相同的,但是jQuery结果缺少thing=save。
此外,当clone()
为元素时,serialize()
为选择框提供了完全不同的结果-您可以在控制台中看到:
"thing=mercedes&name=edited" jqform.htm:18
"thing=subaru&name=edited" jqform.htm:19
这些是jQuery中常见的bug吗?jQuery是否需要一些表单插件来实现一个表单的精确克隆,应该创建相同的表单值?
这些是jQuery中常见的bug吗?
这是所有记录和正确的行为。您应该阅读文档以确保您实际上正确地使用了该库,而不是假设您在一个流行且经过良好测试的库中发现了如此明显的错误。
Serialize永远不会包含您的<button>
。它只包含成功的控件。
clone
将不包含选择框的selected
属性。来自文档:
注意:出于性能原因,某些表单元素的动态状态(例如,输入textarea的用户数据和对select进行的用户选择)不会复制到克隆元素中。当克隆输入元素时,元素的动态状态(例如,在文本输入中输入的用户数据和在复选框中做出的用户选择)将保留在克隆的元素中。
就像我们的朋友meagar说的克隆将不包括选择框的选定属性。那么,为什么不直接从序列化的形式中获得结果字符串的副本呢?您可以简单地执行以下操作来获得所需的内容:
$('form').on('submit', function(evt) {
//evt.preventDefault();
var fm = $(this).serialize();
var fn = fm;
console.log(fm);
console.log(fn);
});
相关文章:
- 当属性不一致时,如何根据属性对JS对象列表进行排序
- Android和JavaScript解析API之间不一致
- Javascript的行为与PHP包含文件不一致
- 对这种与document.domain和CORS相关的不一致行为的解释是什么
- 点击链接行为不一致
- Passport.js`isAuthenticated()`不一致的行为;当它应该是真的时候是假的
- 与显示不一致
- Ext 4.2.1 模型日期解析在浏览器之间不一致
- 通过 Dropbox API 上传时的文件内容不一致
- JavaScript - 对象属性不一致
- Javascript 混淆了 null、instanceof 和 typeof 的语法不一致
- localeCompare 显示使用前导变音字符对单词进行排序时不一致的行为
- SVG 对象部分上的 JQuery click() 不一致
- 使用forEach和.shift()时结果不一致
- Window.open浏览器的高度不一致
- 不同浏览器中的LinkButton PageMethod行为不一致
- 当活动处于后台时,Android WebView不一致
- 使用正则表达式删除标记时,Firefox和Chrome之间存在不一致
- JQuery更改在浏览器之间的行为不一致
- jQuery表单序列化有bug,并且不一致