Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 只允许选中一个复选框。1个复选框,每个复选框有两个独立的表格,全部在一页上_Javascript_Html_Forms_Checkbox - Fatal编程技术网

Javascript 只允许选中一个复选框。1个复选框,每个复选框有两个独立的表格,全部在一页上

Javascript 只允许选中一个复选框。1个复选框,每个复选框有两个独立的表格,全部在一页上,javascript,html,forms,checkbox,Javascript,Html,Forms,Checkbox,我有一个HTTP接口页面,要求用户上传各种独立的文件。为此,我创建了多个表,每个表都有自己的形式 在两个表中,我需要一个复选框,每个复选框允许用户选择它,然后需要在系统启动时安装该文件 两个表都用于上载系统固件,一个表用于主固件,另一个表用于备份固件 如果两个固件都被上传,系统将崩溃,因此需要单独的表单 由于此崩溃问题,对于两个复选框,它需要处于选中状态:一个选中,另一个选中,或者两个都未选中 下面是一个示例html代码: <body> <div id="container"

我有一个HTTP接口页面,要求用户上传各种独立的文件。为此,我创建了多个表,每个表都有自己的形式

在两个表中,我需要一个复选框,每个复选框允许用户选择它,然后需要在系统启动时安装该文件

两个表都用于上载系统固件,一个表用于主固件,另一个表用于备份固件

如果两个固件都被上传,系统将崩溃,因此需要单独的表单

由于此崩溃问题,对于两个复选框,它需要处于选中状态:一个选中,另一个选中,或者两个都未选中

下面是一个示例html代码:

<body>

<div id="container"> 
 <table width="1000" border="0" cellpadding="1" class="uploadBox">
   <tr>
     <td width="460" rowspan="2">
      <form action="fileupload.html" method="post" enctype="multipart/form-data">
       <b>Update Primary System Firmware</b>
        <p style="margin-bottom: 2px"> <b>File: </b>
          <input type="file" name="firmwaremain" size="30" />
          <input type="submit" value="Upload" />
        </p>


    </td>
    <td width="210" height="23">Current File Name:</td>
    <td width="117">Current File Size:</td>
    <td width="102">File Upload Date:</td>
    <td width="93">Install on Start</td>
   </tr>
   <tr>
    <td>~curFirmName~</td>
    <td width="117">~curFirmSize~</td>
    <td width="102">~curFirmDate~</td>
    <td width="93"><input type="checkbox" name="firmPrim" id="firmPrim" /></td>
   </tr>
 </table>
 </form>

 <table width="1000" border="0" cellpadding="1">
   <tr>
    <td width="460" rowspan="2">
     <form action="fileupload.html" method="post" enctype="multipart/form-data">
      <b>Update Backup System Firmware</b>
        <p style="margin-bottom: 2px"><b>File: </b>
          <input type="file" name="firmwarebackup" size="30" /> 
          <input type="submit" value="Upload" />
        </p>

   </td>
   <td width="210" height="23">Current File Name:</td>
   <td width="117">Current File Size:</td>
   <td width="102">File Upload Date:</td>
   <td width="93">Install on Start</td>
  </tr>
  <tr>
   <td>~curBackName~</td>
   <td width="117">~curBackSize~</td>
   <td width="102">~curBackDate~</td>
   <td width="93"><input type="checkbox" name="firmBackup" id="firmBackup" /></td>
 </table>
 </form>
</div>

更新主系统固件
文件:

当前文件名: 当前文件大小: 文件上载日期: 启动时安装 ~curFirmName~ ~curFirmSize~ ~curFirmDate~ 更新备份系统固件 文件:

当前文件名: 当前文件大小: 文件上载日期: 启动时安装 ~cobbackname~ ~z路缘石尺寸~ ~courbackdate~

如您所见,它们的复选框有两种独立的形式,因此我很难运行JavaScript代码,因为(我认为)它要求复选框为一种形式

此外,我不能使用单选按钮,因为它们的形式不同,而且必须有一个选项,两者都不能被选中

是否有方法验证整个页面并选中所有表单,以便页面上只能选择一个复选框

谢谢

问候,,
Josh

在两个复选框中添加一个单击处理程序,如果选中了已单击的复选框,则在另一种形式中取消选中复选框:

var primCheck = document.forms[0].firmPrim;
var backCheck = document.forms[1].firmBackup;
primCheck.onclick = checkClick;
backCheck.onclick = checkClick;

function checkClick(e) {
    var otherCheckbox = this === primCheck ? backCheck : primCheck;
    if (this.checked) {
        otherCheckbox.checked = false;
    }
}

工作演示:

在两个复选框中添加一个单击处理程序,如果选中了已单击的复选框,则在另一个表单中取消选中复选框:

var primCheck = document.forms[0].firmPrim;
var backCheck = document.forms[1].firmBackup;
primCheck.onclick = checkClick;
backCheck.onclick = checkClick;

function checkClick(e) {
    var otherCheckbox = this === primCheck ? backCheck : primCheck;
    if (this.checked) {
        otherCheckbox.checked = false;
    }
}


工作演示:

顺便说一句,波浪形(~)是通过c代码和xml传递到网页的文件。为什么不使用默认选中“无”选项的收音机?您可以将布尔值设置为false,然后在这两个表单中搜索复选框。如果您找到一个复选框,请将其设置为true。如果您发现第二个已选中且布尔值已为true,则调用错误代码(将它们都设置为未选中或您需要执行的任何操作),它们有两种不同的形式。此外,一旦选中,除非进行页面刷新,否则无法取消选中收音机,这可能会导致系统崩溃,gilly所说的将在波浪(~)中正常工作顺便说一句,是通过c代码和xml传递到网页的文件。为什么不使用默认选择“无”选项的收音机?您可以将布尔值设置为false,然后在这两种表单中搜索复选框。如果您找到一个复选框,请将其设置为true。如果您发现第二个已选中且布尔值已为true,则调用错误代码(将它们都设置为未选中或您需要执行的任何操作),它们有两种不同的形式。此外,一旦选中,除非你进行页面刷新,否则无法取消选中收音机,这可能会导致系统崩溃。gilly说的很好。gilly,我更正了第二个复选框ID名称,你的代码是否与我的名称一致?@JoshC-Nope。我的代码依赖于这样一个事实,即您的复选框名称相同。请稍等,我将对其进行更新,以使用不同名称的复选框。@Josh-如果两个复选框都被选中,您还可以在处理表单提交时对它们进行优先级排序,例如,执行一条规则,该规则说“如果两个复选框都被选中,则使用主系统固件并忽略另一个复选框”。这样,当我关闭javascript并在试图查找攻击面时修改表单时,您就安全了。@Stephen P-这如何处理两个表单和两个提交,并且它们是独立的。只是想知道?@JoshC-注意你的HTML有一些问题。在
中有
开始标记,但结束标记在表外。这是无效的HTML。您应该将
开始标记放在开头
标记之前。此外,表中的大多数属性都不赞成使用CSS。你可以删除高度、宽度、单元格间距和单元格填充属性。Gilly,我更正了第二个复选框ID名称,你的代码是否与我的名称一致?@JoshC-Nope。我的代码依赖于这样一个事实,即您的复选框名称相同。请稍等,我将对其进行更新,以使用不同名称的复选框。@Josh-如果两个复选框都被选中,您还可以在处理表单提交时对它们进行优先级排序,例如,执行一条规则,该规则说“如果两个复选框都被选中,则使用主系统固件并忽略另一个复选框”。这样,当我关闭javascript并在试图查找攻击面时修改表单时,您就安全了。@Stephen P-这如何处理两个表单和两个提交,并且它们是独立的。只是想知道?@JoshC-注意你的HTML有一些问题。在
中有
开始标记,但结束标记在表外。这是无效的HTML。您应该将
开始标记放在开头
标记之前。此外,表中的大多数属性都不赞成使用CSS。可以删除高度、宽度、单元格间距和单元格填充属性。