【问题标题】:JQuery serialize not working with inputs in Internet Explorer when the input is inside of a table当输入在表内时,JQuery 序列化不适用于 Internet Explorer 中的输入
【发布时间】:2012-12-11 15:26:00
【问题描述】:

更新:好的,我需要被枪杀。我遗漏了一些表单代码以减少帖子的长度。完整代码如下:

<form name="userupdate" id="userupdate" method="post">
<input type='hidden' name='username' id='username' value='andyd273' />
<input type='hidden' name='setusertype' id='setusertype' value='1' />
<table align="left" border="1" cellspacing="0" cellpadding="3" class="bodytext">
<tr><td>andyd273</td></tr>
<tr><td>
<input type='checkbox' name='DealerType[]' id='GM' value='1' /> GM<br>
<input type='checkbox' name='DealerType[]' id='Chrysler' value='2' /> Chrysler<br>
<input type='checkbox' name='DealerType[]' id='Ford' value='3' /> Ford<br>
</td></tr>
</table><br>
<input type='button' value='Save' onclick='javascript: formSubmit();' />
</form>

我想我会尝试一些东西,并删除了 table 的东西,只留下简单的表单输入,复选框开始像在 Chrome 中一样工作。

那么,新问题:当输入在表格内时,为什么不能在 IE 中序列化工作? 感谢所有尝试帮助解决第一个不完整问题的人!

为了完整起见,遗留问题:

我正在尝试获取要序列化的表单。它适用于 Chrome 和 Firefox,但不适用于 Internet Explorer。
示例:

<input type='hidden' name='username' id='username' value='andyd273'>
<input type='hidden' name='setusertype' id='setusertype' value='1'>
<input type='checkbox' name='DealerType[]' id='GM' value='1' /> GM<br>
<input type='checkbox' name='DealerType[]' id='Chrysler' value='2' /> Chrysler<br>
<input type='checkbox' name='DealerType[]' id='Ford' value='3' /> Ford<br>

在 Chrome 中我得到:

Array
(
    [username] => andyd273
    [setusertype] => 1
    [DealerType] => Array
        (
            [0] => 1
            [1] => 3
        )

)

但在 IE 中我只得到:

Array
(
    [username] => andyd273
    [setusertype] => 1
)

所以我不确定需要做什么才能让它在 IE 中工作。

/老问题

【问题讨论】:

  • 您是否尝试过为复选框使用不同的名称属性?具体来说,一个没有大括号的?我自己会戳它,但我现在手边没有我的 IE VM。
  • 我为了测试把它改成了 DealerType1, DealerType2, DealerType3 而不是大括号,它仍然只发送两个隐藏的输入。很奇怪。
  • 啊,随着更新,答案很容易(如果悲伤)。在表格中嵌套输入元素不是合法的 HTML。

标签: jquery internet-explorer


【解决方案1】:

jQuery 的序列化不包括未选中的复选框。

看看这个小提琴:

http://jsfiddle.net/UGaEp/3/

您可以从以下问题中找到更多信息:

jQuery serialize does not register checkboxes

忽略代码,不让我发布答案。

$('#test').on('click', '#submit', validate);

function validate() {
    var data = $('#test').serialize();
    console.log(data);
}​

【讨论】:

  • 我实际上没有包括未选中的复选框。我实际上只关心检查过的。它在非 IE 中按原样工作。
  • 我不明白您所说的“在非 IE 中工作”是什么意思,上面的示例应该在 ie 中工作。我已经更新了 fiddle 以使用警报而不是 console.logs。
  • 你是对的,它应该像输入的那样工作。不幸的是,我遗漏了一点。我很抱歉。请参阅更新的问题以获得更好的解释。
  • 我真的觉得我在这里遗漏了一些东西,哈哈。我在 ie7-ie9 中检查了以下小提琴,它似乎正在序列化。 jsfiddle.net/UGaEp/3
  • 选中复选框时看到以下文本:username=andyd273&setusertype=1&DealerType%5B%5D=1&DealerType%5B%5D=2&DealerType%5B%5D=3
【解决方案2】:

更新:

因为在表格元素中嵌套输入元素不是合法的 HTML 语法。不过,Chrome 和 Firefox 解决了这个“问题”,值得注意的是:Safari 并非总是如此。

回答 cmets - 如果顺序是 form > table > etc > 输入不正确,table > table stuff > form > input 很好。

进行格式化的“正确”方法基本上是divs 或fieldsets,然后是style 属性。各种display 选项可能是您想要的(inlineinline-block 可能是最有用的,尽管table 和各种衍生产品取决于您必须支持的IE 版本)- 阅读here to figure out what's at your disposal,虽然可能有一些设置高度和宽度的诡计。

旧:

可以用多选界面代替复选框界面吗?这可能是解决...繁琐...IE实现的一种方法。那就是:

<select multiple name="DealerType">
<option value="1">GM</option>
//...etc
</select>

此外,从您的示例中,您的隐藏元素没有关闭(以 /&gt; 而不是 &gt; 终止)。根据您处理的 IE,这可能是问题的一部分。

另一个澄清评论:您使用的是什么版本的 jQ?

【讨论】:

  • 您对非封闭输入是正确的,并且多选这一事实帮助我发现问题不在于表单输入。我更新了问题以更好地反映问题。
  • 如果您通过 w3 html 验证服务在表内运行输入,则它是有效的。理所当然地假设它们在正确的顺序表中 > tr > td > 输入。
  • 我一直使用表格来格式化表格。例如,这是一种使文本框对齐的简单方法,至少对于非 jquery 的东西(传统的表单提交)它总是可以正常工作。如果不是合法的 HTML 也没关系,我可以学习新东西,但格式化表格和排列整齐的正确方法是什么?
  • 一张桌子完全没问题。
  • @DennisMartinez 我不同意,例如:stackoverflow.com/questions/5967564/form-inside-a-table
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-23
  • 1970-01-01
  • 1970-01-01
  • 2018-09-05
  • 2010-11-19
  • 2015-02-13
相关资源
最近更新 更多