如果选中复选框,则在循环中启用输入字段

时间:2015-07-07 07:41:52

标签: javascript checkbox

好的,首先我有一个循环的MySQL结果。

{{1}}

当我点击一个复选框时我想要的是什么:

  • 将输入字段属性设置为“enabled”(document.getElementById(“price”)。disabled = this.checked;)

  • 获取输入字段值并将其保存在页面的某处

这是我的javascript代码

{{1}}

show标签在这里(现在是错的)。 它现在正在使用一条简单的线,但是当我选中第二行或第三行复选框时,第一行的输入就是我想做的。 :(

感谢您的回复!

2 个答案:

答案 0 :(得分:1)

您需要在动态创建的HTML中发送已检查的对象:

      ....   

        $counter = 0; 
        while ($row = mysql_fetch_array($result)) { 
                   $counter++;
                    $html  = "<tr>";
                    $html .= "<th><input class='ads_Checkbox' type='checkbox' name='products[]' value='".$row['pro_name']."'
     onclick='myFunction(this,". $counter .")'> </th>"; //<<<<<<<<<<<<<< send the clicked checkbox to the function
                    $html .= "<th>".$row['pro_id']."</th>";
                    $html .= "<td>".$row['pro_name']."</td>";
                    $html .= "<td><input type='number' name='prices[]' 
id='price_" . $counter ."' value='".$row['pro_price']."' disabled></td>";
                    $html .= "<td>".$row['pro_category']."</td>";
                    $html .= "<td>".$row['pro_link']."</td>";
                    $html .= "</tr>";
                    echo $html;
                }?>

        ....

然后修复你的js以兼容

<script>
        function myFunction(checkbox, level) { // <<<< add the checkbox as paremeter as well as the level (obtained via php counter)
            var products = document.forms[1];
            var txt = "";
            var i;
            for (i = 0; i < products.length; i++) {
                if (products[i].checked) {
                    txt = txt + products[i].value + ", ";
                }
            }
            document.getElementById("order").value = "" + txt;
            document.getElementById("price_" + level).disabled=checkbox.checked; // check if it is checked and assign the value
        }
</script>

修改

我已经在PHP级别添加了一个计数器,我给每个价格一个唯一的ID price_1,price_2 ...等将这个计数器传递给PHP的js函数,并在js中将计数器连接到id以获得正确的元件。

答案 1 :(得分:1)

  1. 您在输入中获得了重复的ID price,因此它只能找到要启用/禁用的第一个input

  2. this绑定到window。您仍然可以使用window.event.target来获取目标。

  3. 您可以将功能更改为:

    function myFunction(checkbox) { // <<<< add the checkbox as paremeter
    
      var products = document.forms[1];
      var txt = "";
      var i;
      for (i = 0; i < products.length; i++) {
          if (products[i].checked) {
              txt = txt + products[i].value + ", ";
          }
      }
    
    
      document.getElementById("order").value = "" + txt;
      // Get the checkbox clicked.
      var checkbox = window.event.target;
      // strucutre is tr -> td -> checkbox and tr -> td -> input, so up trace twice to get tr.
      var tr = checkbox.parentNode.parentNode;
      // Get the related input. and set value
      var input = tr.querySelector("input");
      input.disabled=checkbox.checked; // check if it is checked and assign the value
    }