Php 一次禁用一组输入元素
我需要禁用一组输入元素,而不必在每个元素中设置disabled属性。因为在我的例子中,这些元素都在一个表的行中,所以我想把属性放在容器tr中,但据我所知,只有输入元素支持它。我希望能够做到以下几点:Php 一次禁用一组输入元素,php,html,css,Php,Html,Css,我需要禁用一组输入元素,而不必在每个元素中设置disabled属性。因为在我的例子中,这些元素都在一个表的行中,所以我想把属性放在容器tr中,但据我所知,只有输入元素支持它。我希望能够做到以下几点: <table> <tr disabled="disabled"> <td><input name="i1" type="checkbox" .../></td> <td><input
<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”'并在每个输入中连接。或者你可以创建一个包含每个输入的类型和名称的数组,以及一个循环来遍历它们。我在答案中添加了如何使用数组来存储不同类型的输入。