【问题标题】:check checkbox on populated dropdown value selection via javascript通过javascript选中填充下拉值选择的复选框
【发布时间】:2019-10-13 07:49:42
【问题描述】:

我为 6 个场景得到了我想做的 6 个复选框:

    <tr style="height: 21px;">
<td style="width: 25%; height: 21px;">COB</td>
<td style="width: 25%; height: 21px;"><input name="COB" type="checkbox" id="COB" value="1" <?php if($_GET['COB'] == '1'){  echo 'checked="checked"';}?>/>           </td>
<td style="width: 25%; height: 21px;">SMT</td>
<td style="width: 25%; height: 21px;">  <input name="SMT" id="SMT" type="checkbox" value="1" <?php if($_GET['SMT'] == '1'){  echo 'checked="checked"';}?>/> </td>
</tr>
<tr style="height: 21px;">
<td style="width: 25%; height: 21px;"></td>
<td style="width: 25%; height: 21px;"></td>
<td style="width: 25%; height: 21px;">BGA</td>
<td style="width: 25%; height: 21px;">  <input name="BGA" id="BGA" type="checkbox" value="1" <?php if($_GET['BGA'] == '1'){  echo 'checked="checked"';}?>/> </td>
</tr>
<tr style="height: 21px;">
<td style="width: 25%; height: 21px;"></td>
<td style="width: 25%; height: 21px;"></td>
<td style="width: 25%; height: 21px;">  TSOP Typ 1 </td>
<td style="width: 25%; height: 21px;"><input name="TSOP" id="TSOP" type="checkbox" value="1"<?php if($_GET['TSOP'] == '1'){  echo 'checked="checked"';}?> /></td>
</tr>
<tr style="height: 21px;">
<td style="width: 25%; height: 21px;"></td>
<td style="width: 25%; height: 21px;"></td>
<td style="width: 25%; height: 21px;"> TSOP Typ 2</td>
<td style="width: 25%; height: 21px;"><input name="TSOP2" id="TSOP2" type="checkbox" value="2"<?php if($_GET['TSOP'] == '2'){  echo 'checked="checked"';}?> />   </td>

</tr>
<tr style="height: 21px;">
<td style="width: 25%; height: 21px;"></td>
<td style="width: 25%; height: 21px;"></td>
<td style="width: 25%; height: 21px;"> LGA</td>
<td style="width: 25%; height: 21px;"><input name="LGA" id="LGA" type="checkbox" value="1"<?php if($_GET['LGA'] == '1'){  echo 'checked="checked"';}?> />    </td>
</tr>

这里是我如何填充下拉列表的 PHP 部分。

<td style="width: 14.2857%; height: 21px;">  <select id="FlashID" name="FlashID" onchange="FlashFunction()" size="1" >

                    <option disabled selected value> </option>;                             
            <?php
            foreach($connection->query($flash) as $m)
            {
                        if($m['FlashID'] == $_GET['FlashID']){
                $isSelected = 'selected="selected"';
            }else{
                $isSelected = '';
            }
            echo "<option data-COB='".$m['COB']."' data-SMT='".$m['SMT']."' data-BGA='".$m['BGA']."' data-TSOP='".$m['TSOP']."' data-LGA='".$m['LGA']."' value='" . $m['FlashID'] . "'".$isSelected."  >" .$m['SAP'] ."</option>";

            }
            ?> 
            </td>

这是填充下拉列表的 SQL 表

FlashID   SAP   COB   SMT   BGA   TSOP    LGA
1        102292  0     1     0     2       0
3        102293  0     1     0     2       0
4        102294  0     1     0     2       0
5        102296  0     1     0     0       1
6        102412  0     1     0     1       0
7        102413  0     1     0     1       0
8        102414  0     1     0     1       0
9        102651  0     1     0     2       0
10       102652  0     1     0     2       0
11       102664  0     1     0     2       0

这是我不工作的 Javascript 部分:

<script>
function FlashFunction(){
var index = document.getElementById("FlashID").selectedIndex;
var COB = document.getElementById("FlashID").options[index].getAttribute("data-COB");
var SMT = document.getElementById("FlashID").options[index].getAttribute("data-SMT");
var BGA = document.getElementById("FlashID").options[index].getAttribute("data-BGA");
var TSOP = document.getElementById("FlashID").options[index].getAttribute("data-TSOP");
var LGA = document.getElementById("FlashID").options[index].getAttribute("data-LGA");
document.getElementsByName("COB")[0].value = COB;
document.getElementsByName("SMT")[0].value = SMT;
document.getElementsByName("BGA")[0].value = BGA;
document.getElementsByName("TSOP")[0].value = TSOP;
document.getElementsByName("TSOP2")[0].value = TSOP;
document.getElementsByName("LGA")[0].value = LGA;
}
</script>

请注意,TSOP 可以是值 1 或 2。

例如如果我选择 FlashID 6,您已经看到了。应该选中 TSOP 和 SMT 复选框。

但是 atm 我不知道,为什么我的 Javascript 无法正常工作,我该如何处理?有人可以帮忙吗?

【问题讨论】:

  • 如果您选择 FlashID 6,这里发生了什么? Javascript is not working 是什么意思?
  • TSOP 和 SMT Checkbox 应该被选中,但它们不是
  • @Daniel 是否可以在这里使用静态数据创建可行的示例codesandbox.io

标签: javascript php html checkbox drop-down-menu


【解决方案1】:

我注意到在最后 3 个复选框中,值和 php 代码之间没有空格。

这个:

<td style="width: 25%; height: 21px;"><input name="TSOP2" id="TSOP2" type="checkbox" value="2"<?php if($_GET['TSOP'] == '2'){  echo 'checked="checked"';}?> />   </td>

php执行后可以到这里:

<td style="width: 25%; height: 21px;"><input name="TSOP2" id="TSOP2" type="checkbox" value="2"checked="checked" />   </td>

应该是这样的:

td style="width: 25%; height: 21px;"><input name="TSOP2" id="TSOP2" type="checkbox" value="2" checked="checked" />   </td>

【讨论】:

    【解决方案2】:

    你不检查这样的复选框

    document.getElementsByName("COB")[0].value = COB;
    document.getElementsByName("SMT")[0].value = SMT;
    document.getElementsByName("BGA")[0].value = BGA;
    document.getElementsByName("TSOP")[0].value = TSOP;
    document.getElementsByName("TSOP2")[0].value = TSOP;
    document.getElementsByName("LGA")[0].value = LGA;
    

    正确的做法是这样的:

    document.getElementById("ItemId").checked = true; 
    // because there is one <input ...> i use getEmelentById instead of getElementsById 
    

    在您的程序中,我认为这是您需要使用的正确 javascript:

    <script>
    function FlashFunction(){
    var index = document.getElementById("FlashID").selectedIndex;
    var COB = document.getElementById("FlashID").options[index].getAttribute("data-COB");
    var SMT = document.getElementById("FlashID").options[index].getAttribute("data-SMT");
    var BGA = document.getElementById("FlashID").options[index].getAttribute("data-BGA");
    var TSOP = document.getElementById("FlashID").options[index].getAttribute("data-TSOP");
    var LGA = document.getElementById("FlashID").options[index].getAttribute("data-LGA");
    if (COB == 1 ) {
        document.getElementById("COB").checked= true;
    } else {
        document.getElementById("COB").checked= false;
    }
    if (SMT == 1 ) {
        document.getElementById("SMT").checked= true;
    } else {
        document.getElementById("SMT").checked= false;
    }
    if (BGA == 1 ) {
        document.getElementById("BGA").checked= true;
    } else {
        document.getElementById("BGA").checked= false;
    }
    if (TSOP == 1 ) {
        document.getElementById("TSOP").checked= true;
    } else {
        document.getElementById("TSOP").checked= false;
    }
    if (TSOP == 2 ) {
        document.getElementById("TSOP2").checked= true;
    } else {
        document.getElementById("TSOP2").checked= false;
    }
    if (LGA == 1 ) {
        document.getElementById("LGA").checked= true;
    } else {
        document.getElementById("LGA").checked= false;
    }
    
    }
    </script>
    

    【讨论】:

      【解决方案3】:

      根据DOM Standard,elemnet ID 在整个文档中应该是唯一的。在您的代码中,两个 input 具有相同的 id TSOP

      我已经创建了 codepen sample 以显示 JAVASCRIPT 部分正在工作,您的 PHP 代码可能存在一些问题。

      function FlashFunction() {
      
        var index = document.getElementById("FlashID").selectedIndex;
      
      
        var SMT = document
          .getElementById("FlashID")
          .options[index].getAttribute("data-SMT");
      
        var BGA = document
          .getElementById("FlashID")
          .options[index].getAttribute("data-BGA");
        var TSOP = document
          .getElementById("FlashID")
          .options[index].getAttribute("data-TSOP");
      
      
        var LGA = document
          .getElementById("FlashID")
          .options[index].getAttribute("data-LGA");
      
      
        document.getElementsByName("COB")[0].value = COB;
        document.getElementsByName("SMT")[0].value = SMT;
        document.getElementsByName("BGA")[0].value = BGA;
        document.getElementsByName("TSOP")[0].value = TSOP;
        document.getElementsByName("TSOP2")[0].value = TSOP;
        document.getElementsByName("LGA")[0].value = LGA;
        
        if (TSOP == 1) {
          document.getElementsByName("TSOP")[0].checked = true;
        }
      }
      <select id="FlashID" name="FlashID" onchange="FlashFunction()">
        <option data-SMT="1" value="volvo">102292</option>
        <option data-SMT="1" value="saab">102293</option>
        <option data-SMT="1" data-TSOP="1" value="mercedes">102412</option>
      </select>
      <table>
        <tr style="height: 21px;">
          <td style="width: 25%; height: 21px;">COB</td>
          <td style="width: 25%; height: 21px;"><input name="COB" type="checkbox" id="COB" value="1" /> </td>
          <td style="width: 25%; height: 21px;">SMT</td>
          <td style="width: 25%; height: 21px;"> <input name="SMT" id="SMT" type="checkbox" value="1" </td>
        </tr>
        <tr style="height: 21px;">
          <td style="width: 25%; height: 21px;"></td>
          <td style="width: 25%; height: 21px;"></td>
          <td style="width: 25%; height: 21px;">BGA</td>
          <td style="width: 25%; height: 21px;"> <input name="BGA" id="BGA" type="checkbox" value="1" </td>
        </tr>
        <tr style="height: 21px;">
          <td style="width: 25%; height: 21px;"></td>
          <td style="width: 25%; height: 21px;"></td>
          <td style="width: 25%; height: 21px;"> TSOP Typ 1 </td>
          <td style="width: 25%; height: 21px;"><input name="TSOP" id="TSOP" type="checkbox" value="1" </td>
        </tr>
        <tr style="height: 21px;">
          <td style="width: 25%; height: 21px;"></td>
          <td style="width: 25%; height: 21px;"></td>
          <td style="width: 25%; height: 21px;"> TSOP Typ 2</td>
          <td style="width: 25%; height: 21px;"><input name="TSOP2" id="TSOP2" type="checkbox" value="2" </td>
      
        </tr>
        <tr style="height: 21px;">
          <td style="width: 25%; height: 21px;"></td>
          <td style="width: 25%; height: 21px;"></td>
          <td style="width: 25%; height: 21px;"> LGA</td>
          <td style="width: 25%; height: 21px;">
            <input name="LGA" id="LGA" type="checkbox" value="1" </td>
        </tr>
      </table>

      【讨论】:

      • 编辑。我变了。请注意,TSOP 可以是值 1 或 2。
      • 您可以使用静态数据创建演示吗?或者你可以在 PHP 之后添加 HTML 生成吗,因为看看 data-TSOP='".$m['TSOP']."' 是数组还是数字很有趣
      猜你喜欢
      • 2016-09-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-29
      • 1970-01-01
      相关资源
      最近更新 更多