从表单提交中排除单选按钮,但不禁用它们。

4
我正在使用一些单选按钮来影响jQuery小部件的行为状态。该小部件可以在表单中使用,但是由于这些单选按钮不包含任何实际数据,我不希望它们向服务器提交噪音,或者对将在其表单中使用小部件的人造成命名冲突。
以下是两个潜在的解决方案,但还不令人满意: - 删除"名称(name)"属性: 对于其他输入项似乎可以正常工作,但会把我的单选按钮变成复选框: 它会破坏它们之间的联系,因此选择一个不会取消其他选项。除了Javascript事件之外,是否有一种HTML方法可以在没有名称属性的情况下绑定它们? - 禁用输入: 如预期的那样,没有任何内容被提交,但单选按钮变灰且无法点击。是否有任何方式可以使它们可点击但不可提交,就像在提交时被禁用一样?
尽可能地,我更倾向于寻找一个跨浏览器的解决方案。

它们需要在表单内吗? - Zuul
我们必须假设它是需求的一部分。这个想法是将小部件包含在表单中,并像任何其他字段一样工作。 - ejoubaud
2个回答

2

试试这个:

<form>
    <input type="radio" name="group1" value="1" form="">
    <input type="radio" name="group1" value="2" form="">
</form>

这仍然使用了name属性,这对于单选按钮是必需的,并且它也使输入保持启用状态以进行交互。没有JavaScript代码,不需要在提交期间修补文档,希望提交会顺利进行,而在提交之前破坏文档将不留下任何可见痕迹。

form = ""属性表示这些输入元素不包含在其父表单中。实际上,您应该在此属性中放置另一个现有的<form>元素的ID,但是根据HTML标准,您可能不应该从表单中排除单选按钮。因此,这种方法是解决问题的唯一方法。(在Internet Explorer中无效,但今天还有什么有效呢。)

我打算使用此方法来处理数据表中的单选按钮组,该数据表是从<template>元素填充的。在这种情况下,每个表行都将有一个单选组,因此它们的数量未知。但是由于name属性是构建单选按钮组的唯一方法,它们需要分配计数名称。由于在提交之前将表格数据放入JSON字段中,因此我不需要表单提交的字段名称。单选按钮确实需要它们自己的名称,但此方法仍将排除它们被提交。


1
尝试在提交之前调用一个函数,以禁用单选按钮。
function disableBtn() {
  document.getElementById('idbtn1').setAttribute('disabled', 'disabled');
  document.getElementById('idbtn2').setAttribute('disabled', 'disabled');
  return true;
}

然后,以表格形式呈现:

<form action="file" method="post" onsubmit="return disableBtn()">

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接