从包含两个下拉列表的表格行中,获取选定的值&哪个下拉列表改变了

时间:2017-03-12 08:44:12

标签: javascript jquery ajax asp.net-mvc drop-down-menu

我正在尝试在表格中更新两个级联下拉列表 SO有许多答案用于下拉,但我无法在cascading updates内找到帮助一个Table dynamically added rows

鉴于许多行,他们都有不同的身份filter #Id确实无法正常工作。那么,如何识别 Dropdown触发更改的行& 在同一行的下一个列中将更新另一个Dropdown / cell 级联

表格行单元格中有2个DropDownList(选择框)。为了简化这一点,第一个是Country - >第二个是state。因此,用户需要选择国家/地区,然后选择州。

我的伪算法:

  • 找到哪一个被解雇,哪一行(不确定是否需要,我应该在哪里接线
  • 然后触发ajax调用...以获取基于国家/地区的值
  • 使用同一表格行中的值更新第二个下拉列表。
  • 案例 1 更改国家,然后更改状态。
  • 案例 2 只需更改状态,但首先在同一行的第一个下拉列表中获取国家/地区值

我知道如何在常规页面中获取更改和值,但如何获取这些更改并更新相邻的下拉列表。

$(document).on('change', 'select', function(){
      var data = $(this).val();
      alert(data);
});

编辑,Stephen请求显示HTML

<tr>
  <td>
    //DropDown 1 (Imagine Country)
    <span class="projectcodeid"> 
      <select class="form-control" id="Records_1__TCode_Project_ID" name="Records[1].TCode.Project.ID"><option value=""></option>
       <option value="1">Plumbing</option>
       <option value="2">Modeling</option>
      </select></span>                                                    
  </td>

  <td>
    //DropDown 2 (Imagine State)
    <input type="hidden" name="Records.Index" value="1">
    <input class="timecodeid" name="Records[1].TCode.ID" type="hidden" value="5">                                                    
    <span class="timecode timecodeDdlId"> <select class="form-control timecodeDdlId" id="Records_1__TCode_ID" name="Records[1].TCode.ID"><option value=""></option>
</select></span>
    </td>

    <td>
        <input name="Records[1].DataRecords[0].ID" type="hidden" value="">
        <input class="hours" name="Records[1].DataRecords[0].Work" type="text" value="">
    </td>                                                

    <td>
       <input class="bs-checkbox" name="Records[1].DeleteRow" type="checkbox" value="true"><input name="Records[1].DeleteRow" type="hidden" value="false">
    </td>
 </tr>

示例图像以便澄清 An example of cascading table

2 个答案:

答案 0 :(得分:2)

假设您无法按类或任何方式识别dropdwns。 假设每次更改下拉列表中的值时,您希望更新同一行上的其他下拉列表。 假设每行只有两个下拉列表:

$('table').on('change', 'select', function() {
    var $current_dropdown = $(this),
        $other_dropdown = $(this).closest('tr').find('select').not(this);

    /// perform any task you need with current and other dropdown

});

答案 1 :(得分:2)

您需要同时提供<select>元素类名称并使用相对选择器来选择同一行中的关联元素。

假设您的HTML是

<table id="table"> // give this an id attribute
    <tbody>
        <tr>
            <td><select class="country" ....> ..... </select></td>
            <td><select class="state" ....> ..... </select></td>
        </tr>
    </tbody>
</table>

然后你的脚本将是

$('#table').on('change', '.country', function() {
    var selectedValue = $(this).val();
    var row = $(this).closest('tr'); // get the row
    var stateSelect = row.find('.state'); // get the other select in the same row
    // make you ajax call passing the selectedValue to your controller
    // in the success callback, update the options of stateSelect 
    $.ajax({
        url: ...
        data { id: selectedValue },
        ....
        success: function(data) {
            stateSelect.empty();
            $.each(data, function(item, index) {
                stateSelect.append($('<option></option>').val(iem.ID).text(item.Name));
            }
        }
    });
}

另请参阅better way to load 2 dropdown in mvc以获取填充级联下拉列表的代码的详细信息(考虑根据第二个代码示例缓存选项以避免重复的ajax调用)