2017-06-13 82 views
0

我有一個while循環只有一個測試複選框,我從數據庫中獲取數據:允許檢查內部,而

while($row = mysqli_fetch_array($skillsResult)) 
{  

    $id = $row['id']; 
    $driver = $row['driver']; 
    $subdriver = $row['subdriver']; 
    $dep = $row['department']; 
    $skill = $row['skills']; 
    $vrgood = $row['4']; 
    $good = $row['3']; 
    $middle = $row['2']; 
    $low = $row['1']; 
?> 

<br/><br/> 
<fieldset> 
<legend id="q1" class="desc notranslate"> 
    <?php echo $no++; ?> 
</legend> 
<div class="full_qst"> 
    <div class="drvr"> <?php echo $driver; ?> </div><span class="divider">|</span> 
    <div class="sbd_drvr"> <?php echo $subdriver; ?> </div><span class="divider">|</span> 
    <div class="qst"> <?php echo $skill; ?> </div> 

    <div class="mrk"> 
     <span> 
      <label class="choice" for="q1_a" > 
      <input class="q" name="q1_a[]" type="checkbox" value="<?php echo $low ?>" /> 
      1</label> 
     </span> 
     <span> 
      <label class="choice" for="q1_a" > 
      <input class="q" name="q1_a[]" type="checkbox" value="<?php echo $middle ?>" /> 
      2</label> 
     </span> 
     <span> 
      <label class="choice" for="q1_a" > 
      <input class="q" name="q1_a[]" type="checkbox" value="<?php echo $good ?>" /> 
      3</label> 
     </span>  
     <span> 
      <label class="choice" for="q1_a" > 
      <input class="q" name="q1_a[]" type="checkbox" value="<?php echo $vrgood ?>" /> 
      4</label> 
     </span> 
    </div> 
</div> 
</fieldset> 
<?php 
$count++; 
} 

我避開15條記錄。我想要的是允許用戶單獨檢查每一行的複選框,並允許他們只檢查同一行上的框。 因此,而不是這樣的: enter image description here

我想這一點:enter image description here

我試圖實現這一點:

$('.mrk input#q').on('change', function() { 
    if($(this).is(':checked')){ 
     $(':checkbox[name="' + $(this).prop('name') + '"]').not($(this)).prop('checked',false); 
    } 
}); 

但取消選擇在上線之前的框,讓我只能選擇整個頁面中的一個複選框。有沒有辦法解決它?

回答

1

你的代碼是工作的罰款只是$('input.q')類替代選擇

但只允許對於所有複選框,每行選中一個複選框具有相同的名稱將需要下面的代碼,它將取消選中同一div內的所有複選框,然後檢查更改後的複選框。

$('input.q').on('change', function() { 
    $(this).parents('.full_qst').find(".q[name='"+$(this).attr("name")+"']").not(this).prop('checked',false); 
}); 
+0

工作一半。它不允許用戶檢查同一行上的多個值,但是當我不想檢查下一個值時,它會取消選中前一行的值。所以它允許我只檢查一個複選框 –

+0

您需要在複選框名稱中添加增加的數字,每行一次複選框名稱是唯一的,代碼將正常工作! –

+0

你的意思是我需要在php代碼中做到這一點嗎?或內部的JS代碼?那麼我將如何提交表格,如果每行的名稱不同。 –

0

您可以使用該作業的.siblings()函數,並且從不在同一頁面上爲dom元素使用相同的Id。它只會得到你的第一個ID,並不會看到其他人。

$('.mrk input').on('change', function() { 
    if($(this).is(':checked')){ 
     $(this).siblings('input').prop('checked',false); 
    }else 
     $('.mrk input').prop('checked',false); 
}); 

如果沒有需要檢查,如果這個檢查你甚至可以用

$('.mrk input').on('change', function() { 
     $(this).siblings('input').prop('checked',false); 
}); 
+0

我仍然可以檢查同一行上的幾個值。但我需要允許用戶只檢查一個。這意味着如果他已經選中了1並點擊了2,那麼1就沒有選中。我刪除了ID並更改爲類也 –

+0

好吧,那麼上面的代碼應該工作正常,除非你有不同的結構在你的HTML。兄弟姐妹('輸入')做的是,當你點擊一個輸入時,它選擇父div中的所有輸入。所以這應該取消選中div中所有的輸入,除了你點擊的輸入。除此之外,如果在if語句內部插入控制檯日誌。如果你沒有測試它並給出反饋,請 – necilAlbayrak