基于同一表行中的另一个值的单选按钮选择状态

时间:2018-08-29 20:53:33

标签: javascript jquery html

我遇到一种情况,我想通过表格中的复选框选择各种选项,并同时通过单选按钮选项选择默认行。 (可以将其看作是复选框中的总体权限,然后是单选框中的默认访问权限)。用户可以在复选框选择中选择各种选项,然后对于这些选择的选项,他们可以选择一个主要的默认选择。如果某行的复选框未选中,则他们将不能选择该行上的单选按钮。

enter image description here

在查看图片时,除非选中该行中的复选框,否则应该不能单击第2行(商店2)中的单选按钮。

我上面图片的html如下

<table class="table shopListTable">
<tr>
    <th>@Html.DisplayName("Shop Name")</th>  
    <th>@Html.DisplayName("Allowed")</th>
    <th>@Html.DisplayName("Default")</th>
</tr>
    @foreach (var item in @ViewBag.ShopList)                                    
    {
    <tr>
        <td>
            @item.q_name                                            
        </td>
        <td>                                            
            <input class="checkBox" type="checkbox" id="shopAllowed" name="shopAllowed" value="@item.q_guid" />
            @item.q_guid
        </td>
        <td>
            <input class="radioButton" type="radio" id="shopDefault" name="shopDefault" value="@item.q_guid" />
        </td>
    </tr>
    } 
</table>

当您单击单选按钮时,当前尝试使用Javascript检测该行中复选框状态的尝试如下

$(document).ready(function () {

$('input[type=radio]').click(function () {
    //var radioButtonValue = this.value;
    var row = $(this).closest('tr');

    var checkBoxState = row.find('.checkBox').is(":checked");

    alert(checkBoxState)

    if (checkBoxState == true) {
        //allow selection of radion button                    
    }
    else {
        //do not allow                    
    }
  });

});

到目前为止,我已经可以正确地获得alert(checkBoxState)上复选框的状态(是/否)。我想现在我需要的只是

if (checkBoxState == false) {
//do not select the radio button                    
}

因为选择单选按钮不是问题。当状态为false时,我需要解决该问题。

1 个答案:

答案 0 :(得分:1)

  

我想现在我需要的是....

是的,您是对的。为了避免选择单选按钮,可以调用事件处理程序的.preventDefault()方法。

在任何情况下,生成表时都要注意重复的ID(即:id =“ shopAllowed” ...)

$(':radio').on('click', function (e) {
    var row = $(this).closest('tr');
    var checkBoxState = row.find('.checkBox').is(":checked");
    if (checkBoxState == false) {
        e.preventDefault();
    }
});
table {
    font-family: arial, sans-serif;
    border-collapse: collapse;
    width: 100%;
}

td, th {
    border: 1px solid #dddddd;
    text-align: left;
    padding: 8px;
}

tr:nth-child(even) {
    background-color: #dddddd;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table class="table shopListTable">
    <tr>
        <th>Shop Name</th>
        <th>Allowed</th>
        <th>Default</th>
    </tr>
    <tr>
        <td>
            name
        </td>
        <td>
            <input class="checkBox" type="checkbox" id="shopAllowed1" name="shopAllowed" value="guid" />
            guid
        </td>
        <td>
            <input class="radioButton" type="radio" id="shopDefault2" name="shopDefault" value="guid" />
        </td>
    </tr>
    <tr>
        <td>
            name
        </td>
        <td>
            <input class="checkBox" type="checkbox" id="shopAllowed3" name="shopAllowed" value="guid" />
            guid
        </td>
        <td>
            <input class="radioButton" type="radio" id="shopDefault4" name="shopDefault" value="guid" />
        </td>
    </tr>
    <tr>
        <td>
            name
        </td>
        <td>
            <input class="checkBox" type="checkbox" id="shopAllowed5" name="shopAllowed" value="guid" />
            guid
        </td>
        <td>
            <input class="radioButton" type="radio" id="shopDefault6" name="shopDefault" value="guid" />
        </td>
    </tr>
</table>