2014-09-26 64 views
0

多行optionsMenu变化值我创建一个数据表,下面的代码选中该复选框通过使用相同的ID

<?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

+0

它与IDS是唯一的事情。在这种情况下,只有第一个会改变。 – Rasclatt 2014-09-26 19:06:43

+0

@Rasclatt是的,但我的问题是,如何解决这个问题 – 2014-09-26 19:07:37

+0

那么,在过去我已经通过在循环结束前和循环结束时添加'$ i = 0 .... $ i ++'来解决它,并且在这种情况下写'id =“redeemOptions <?php echo $ i;?>”'使id唯一,然后做一个内联函数(我知道...),但它的工作原理。我没有受过javascript/jquery的教育,不足以执行内联函数.... – Rasclatt 2014-09-26 19:10:37

回答

2

这样做的问题是,一个ID必须标识页面上的一个单一元素,并且您正在生成具有相同ID的多个项目。改变你的选择,以类似下面:

<select name="type" class="form-control redeemOptions"> 

,然后改变你的JavaScript函数如下,采取的事实,即“这”将等于对象的改变事件被烧制而成:

$('.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的一个元素。

+0

它进入这里,如果(menuChanged.val()=='无'),我改变它为true,但没有选择 – 2014-09-28 04:01:23

0

正如我可以看到$ redeemSales中的每个$ sale都有一个复选框,其ID为“userSelection”和一个ID为“redeemOptions”的选择框。我建议你使用独特的ID。因此,将$ i = 0 ... $ i ++附加到两者的ID中。

For Row 1: userSelection0 redeemOptions0 
For Row 2: userSelection1 redeemOptions1 
and so on.. 

在选择标签,使用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>