如何防止在表中的多个下拉列表中选择相同的值并 POST 到服务器

Posted

技术标签:

【中文标题】如何防止在表中的多个下拉列表中选择相同的值并 POST 到服务器【英文标题】:How to prevent same selected values in multiple drop down lists in a table & POST to server 【发布时间】:2018-01-22 19:50:56 【问题描述】:

示例:想象一个table of babies每一行用户选择婴儿GenderDropDown,然后选择一个名字。我需要防止跨表选择重复名称,如果用户选择男性和约翰,他不能在另一行中再次选择该名称。 除了婴儿,My table 的行包含 Projects,BillCodes 为 DropDowns。如果disable 是下拉列表中的选择选项,则它不会 POST 到服务器!

$('.timecodeDdlId').find('option[value=' + $(this).val() + ']').prop('disabled', true); 工作但禁用不会将所选值发布到服务器


问题:如何防止在第二个下拉菜单中重复选择?虽然我在 So here 上找到了答案。但是,它们失败了 - 并且不发布到服务器**。 $('.timecodeDdlId').find('option[value=' + $(this).val() + ']').prop('disabled', true); 不会 POST 到服务器端。


渲染的 html 片段表,带有下拉行

 <tbody id="TS">
 <tr class="rowCss"> //ROW 1

<td>
  <span class="project">
    <select class="form-control projectcodeid" id="Records_0__SelectedProjectFromList" name="Records[0].SelectedProjectFromList">
      <option value="">Modeling</option>
      <option value="1">Ventosanzap</option>
      <option value="2">Modeling</option>
    </select>
  </span>
</td>
<td>
  <input type="hidden" name="Records.Index" value="0">
    <span class="billingcodeCss">
      <select class="form-control timecodeDdlId" id="Records_0__SelectedBillingCodesFromList" name="Records[0].SelectedBillingCodesFromList">
        <option value="">Budget-070</option>
        <option selected="selected" value="5">Budget-070  </option>
        <option value="6">Budget-784                                        </option>
      </select>
    </span>
  </td>
</tr>
<tr class="rowCss"> //ROW 2

  <td>
    <span class="project">
      <select class="form-control projectcodeid" id="Records_0__SelectedProjectFromList" name="Records[0].SelectedProjectFromList">
        <option value="">Modeling</option>
        <option value="1">Ventosanzap</option>
        <option value="2">Modeling</option>
      </select>
    </span>
  </td>
  <td>
    <input type="hidden" name="Records.Index" value="0">
      <span class="billingcodeCss">
        <select class="form-control timecodeDdlId" id="Records_0__SelectedBillingCodesFromList" name="Records[0].SelectedBillingCodesFromList">
          <option value="">Budget-070</option>
          <option selected="selected" value="5">Budget-070  </option>   // HOW TO PREVENT DUPLICATE AND STILL POST TO SERVER

          <option value="6">Budget-784                                        </option>
        </select>
      </span>
    </td>
  </tr> //

</tbody>

javascript OnChange 防止重复选择

    //Disable other previous/next selected TimeCodes On Change
    $('#TS').on('change', '.timecodeDdlId', function ()  //baby name check

        //Is this the correct dropdown we are selecting why not $this?
        var allSelectedBillingCodeDropDown = $('#TS .timecodeDdlId option:selected');
        var thisBillingSelectedDropDown = $(this);
        var currentSelectBillingCode = $(this).val();
        // get exisiting vlaue seelections
        $.each(allSelectedBillingCodeDropDown, function (index, item) 
            if ($(item).val() == currentSelectBillingCode)
            
                debugger;
                // remove this selection
                //selectedBillingCodeDropDown.find('option[value=' + currentSelectBillingCode + ']').remove();
                thisBillingSelectedDropDown.find('option[value=' + currentSelectBillingCode + ']').remove();
                //alert userd
                alert('Billing code cannot be the same');
                return false;
            

            // $('#select_id').find('option[value=' + foo + ']').remove();
            //item.remove all

        );

【问题讨论】:

问题...如果您尝试获取此$('.timecodeDdlId').find('option[value=' + value + ']')...您会从浏览器控制台中得到什么...您是否获得了值?...禁用的元素不会发布到服务器(或者至少我永远无法从请求中获得它的价值)......所以也许你可以尝试添加样式规则而不是禁用它?,并从选项中删除 pointer-events 使其无法被选中?只是一些想法。 @DavidEspino 你能分享一个关于如何使用样式元素禁用的sn-p。 好吧,我有另一个答案可以避免它的指针事件...只是一个 css 道具,您可以设置它以查看它是否符合您的需求。这里:***.com/questions/6657545/… @DavidEspino 这是一种有趣的方法,但请在不涉及指针的地方,比如键盘标签失败。 【参考方案1】:
You can try this way

    $(document).ready(function() 
          $("select").on('hover', function () 
                $previousValue = $(this).val();
            ).change(function() 
                $("select").not(this).find("option[value='"+ $(this).val() + "']").attr('disabled', true);
                $("select").not(this).find("option[value='"+ $previousValue + "']").attr('disabled', false);
            );
        );

    $("#confirm-form").submit(function(e) 
        e.preventDefault();
        $("select").find("option").removeAttr('disabled');
        document.getElementById('confirm-form').submit();
    );

【讨论】:

以上是关于如何防止在表中的多个下拉列表中选择相同的值并 POST 到服务器的主要内容,如果未能解决你的问题,请参考以下文章

如何根据下拉列表选择的值更改表中的数据

Power BI中有一列日期有多个是相同的,如何在表中的X轴上全部显示出来

如何在反应原生中过滤多个选择下拉字段中的数组值

在表中插入记录时将所选值作为城市下拉列表的空值

如何在下拉列表中选择与 specflow 大纲值相同的值

T-SQL:如何在值列表中选择不在表中的值?