我正在创建一个带有以下代码的数据表
<?php
foreach($redeemSales as $sale)
{
?>
<tr class='clickableRow<?php echo $isRead ? '' : ' newrow' ?>' href='#'>
<td><form><input type="checkbox" id="userSelection" name="userslection" ></form></td>
<td><?php echo $sale["ring"];?></td>
<td><?php echo formatFullDate($sale["soldDate"]) ?></td>
<td><?php echo $sale["saleType"]; ?></td>
<td>
<div class="col-lg-8">
<select name="type" id="redeemOptions" class="form-control">
<option value="None">None</option>
<option value="CD">(CD)</option>
<option value="Amex">American Express Card (Amex)</option>
</select>
</div>
</td>
</tr>
<?php }?>
我想这样做,如果有人将选项更改为CD或美国运通的任何oe,它会将选择设置为选中的行。
jAVAScript代码在这里
<script language="javascript">
$(document).ready(function(e)
{
$('#redeemOptions').change(function(){
if($('#redeemOptions').val() == 'None')
{
document.getElementById("userSelection").checked = false;
}
else
{
document.getElementById("userSelection").checked = true;
}
});
});
</script>
正如您所看到的,有一个for循环,所以它的行被添加到表中。上述方法仅适用于第一行。如果我更改选项,它会将选择设置为选中。但在第一行之后,没有其他行显示这种行为。这可能和元素的id有关。
如何找到一个解决方案,使其他行显示相同的行为。第二,如果我必须获取所有被"检查"的行的id或值,我将如何在php
问题是,一个id必须标识页面上的一个元素,而您正在生成具有相同id的多个项目。将您的选择更改为以下内容:
<select name="type" class="form-control redeemOptions">
然后将您的javascript函数更改为以下内容,以利用"this"将等于触发更改事件的对象这一事实:
$('.redeemOptions').change(function(){
var menuChanged = $(this),
parentForm = menuChanged.closest('form'),
correspondingCheckbox = parentForm.find('input[name=userSelection]');
if(menuChanged.val() == 'None')
{
correspondingCheckbox[0].checked = false;
}
else
{
correspondingCheckbox[0].checked = true;
}
});
最后,从复选框中删除id="userSelection",只保留名称。它不会损害功能,但从技术上讲是无效的,因为页面上只能有一个给定id的元素。
正如我所看到的,对于$reduceSales中的每一笔$sales,都有一个id为"userSelection"的复选框和一个id为"reduceOptions"的选择框。我建议你使用唯一的id。因此,将$i=0…$i++附加到两者的id。
For Row 1: userSelection0 redeemOptions0
For Row 2: userSelection1 redeemOptions1
and so on..
在Select标记中,使用onchange事件:-
<select name="type" id="redeemOptions<?php echo $i; ?>" class="form-control" onchange="foo(<?php echo $i; ?>)">
并编写一个javascript函数:-
<script language="javascript" type="text/javascript">
function foo(id)
{
if($('#redeemOptions'+id).val() == 'None')
{
document.getElementById("userSelection"+id).checked = false;
}
else
{
document.getElementById("userSelection"+id).checked = true;
}
}
</script>