好的,首先我有一个循环的MySQL结果。
{{1}}
当我点击一个复选框时我想要的是什么:
将输入字段属性设置为“enabled”(document.getElementById(“price”)。disabled = this.checked;)
获取输入字段值并将其保存在页面的某处
这是我的javascript代码
{{1}}
show标签在这里(现在是错的)。 它现在正在使用一条简单的线,但是当我选中第二行或第三行复选框时,第一行的输入就是我想做的。 :(
感谢您的回复!
答案 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)
您在输入中获得了重复的ID price
,因此它只能找到要启用/禁用的第一个input
。
this
绑定到window
。您仍然可以使用window.event.target来获取目标。
您可以将功能更改为:
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
}