Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/263.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
Php 一次禁用一组输入元素_Php_Html_Css - Fatal编程技术网

Php 一次禁用一组输入元素

Php 一次禁用一组输入元素,php,html,css,Php,Html,Css,我需要禁用一组输入元素,而不必在每个元素中设置disabled属性。因为在我的例子中,这些元素都在一个表的行中,所以我想把属性放在容器tr中,但据我所知,只有输入元素支持它。我希望能够做到以下几点: <table> <tr disabled="disabled"> <td><input name="i1" type="checkbox" .../></td> <td><input

我需要禁用一组输入元素,而不必在每个元素中设置disabled属性。因为在我的例子中,这些元素都在一个表的行中,所以我想把属性放在容器tr中,但据我所知,只有输入元素支持它。我希望能够做到以下几点:

<table>
    <tr disabled="disabled">
        <td><input name="i1" type="checkbox" .../></td>
        <td><input name="i2" type="text" .../></td>
            ...
        <td><input name="iN" type="text" .../></td>
    </tr>
</table>
<table>
    <tr disabled="disabled">
<?php
  $arr = array("checkbox","text","text"...);
  for ($i=0;$i<$n;$i++)
        echo '<td><input name="i'.($i+1).'" type="'.$arr[$i].'" disabled="disabled" .../></td>';
?>
    </tr>
</table>

...
并禁用从i1到iN的所有输入。
我怎样才能达到同样的效果,可能是使用CSS或其他方法?

如果你可以使用Javascript,类似这样的方法可以达到目的:

var inputs = document.getElementsByTagName("INPUT");
for (var i = 0; i < inputs.length; i++) {
    inputs[i].disabled = true;
}
如果您不能使用Javascript,那么我唯一能想到的就是使用CSS隐藏
标记,但这不会真正禁用它们,只会在视图中隐藏它们。因此,如果任何输入具有默认值,这些值仍将被传递

input {
  display: none;
}

在所有条件相同的情况下,我绝对建议使用Javascript或jQuery方法

最好的选择是使用

$('.disabled input').attr('disabled','disabled')


这将禁用禁用行下的所有输入元素。

不能通过CSS禁用


您可以通过javascript实现它(如Dryden Long answer)。禁用相关tr的所有输入

但这样做的问题是在渲染时不会被禁用。这意味着总有一刻输入不会被禁用。请记住这一点


我不知道如何创建这些输入。 但是,例如,如果它们是通过PHP生成的,则可以在循环中指定它们

即使您不这样做,如果您可以在服务器上使用PHP,也可以使事情变得更简单。 这样做很简单:

<table>
    <tr disabled="disabled">
        <td><input name="i1" type="checkbox" .../></td>
<?php
  for ($i=2;$i<$n;$i++)
        echo '<td><input name="i'.$i.'" type="text" disabled="disabled" .../></td>';
?>
    </tr>
</table>


如果您有不同的类型,您可以随时执行以下操作:

<table>
    <tr disabled="disabled">
        <td><input name="i1" type="checkbox" .../></td>
        <td><input name="i2" type="text" .../></td>
            ...
        <td><input name="iN" type="text" .../></td>
    </tr>
</table>
<table>
    <tr disabled="disabled">
<?php
  $arr = array("checkbox","text","text"...);
  for ($i=0;$i<$n;$i++)
        echo '<td><input name="i'.($i+1).'" type="'.$arr[$i].'" disabled="disabled" .../></td>';
?>
    </tr>
</table>

如果要避免使用相等的字符串,可以创建第二个数组来存储不同的可能值。像这样:

<table>
    <tr disabled="disabled">
<?php
  $arr1 = array(0,1,1,1,0,1...);
  $arr2 = array("checkbox","text");
  for ($i=0;$i<$n;$i++)
        echo '<td><input name="i'.($i+1).'" type="'.$arr2[$arr1[$i]].'" disabled="disabled" .../></td>';
?>
    </tr>
</table>


我能想到的唯一方法就是使用Javascript。这是你的一个选择吗?我同意,在CSS中没有“好”的方法来做到这一点。我会使用javascript。是的,事实上我正在使用PHP来生成它们。但它不会发生在一个循环中,因为它们都是不同的。确切地说,我在它们中指定了不同的类型(第一个是复选框,第二个是文本)来突出显示它。我知道我可以从PHP设置echo的disabled属性,但是我必须为每个输入显式地设置它,这就是我想要避免的。您可以创建一个变量$dis='disabled=“disabled”'并在每个输入中连接。或者你可以创建一个包含每个输入的类型和名称的数组,以及一个循环来遍历它们。我在答案中添加了如何使用数组来存储不同类型的输入。