【问题标题】:Enabled Disabled Select option based on previous dropdown?已启用 已禁用 根据先前的下拉菜单选择选项?
【发布时间】:2020-08-24 07:16:52
【问题描述】:

我有 2 个下拉菜单,比如说选择 1 和选择 2,场景是 当用户在select 1上选择下拉菜单并选择A,如此select 2,选项A将被禁用。

这是我的代码,实际上这是有效的,

但是我有一个条件,当用户编辑下拉列表时,在选择 1 时用户已经选择了 A,但仍然没有选择选择 2,我想要的是必须禁用选择 2 中的选项 A,但目前它仍然启用

jsfiddle https://jsfiddle.net/q3mu7x2w/

$("#pr_bundling").change(function(){

    $("#pr_cross").find("option").each(function(){
        $(this).removeAttr("disabled");
    });
    $("#pr_cross [value=" + $(this).val() + "]").attr("disabled","disabled");

    $('#pr_cross').not(this).has('option[value="'+  this.value + '"]:selected').val('noselect29');



})
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<h3>select 1</h3>
  <select class="form-control" id="pr_bundling">
    <option value='noselect99' selected >Select</option>
    <option value="A" selected>A</option>
    <option value="B">B</option>
    <option value="C">C</option>
</select>
<br>

<h3>select 2</h3>
 <select class="form-control" id="pr_cross">
      <option value='noselect29' selected >Select</option>
     <option value="A">A</option>
     <option value="B">B</option>
     <option value="C">C</option>
     <option value="D">D</option>
 </select>

【问题讨论】:

  • 这能回答你的问题吗? Disable options based on previous selects
  • 你想用$('#pr_cross').not(this).has('option[value="'+ this.value + '"]:selected').val('noselect29');实现什么?
  • 如果用户在选择 1 上进行任何更改,选择 2 将被重置
  • 我有一个条件,当用户想要编辑时,用户已经在选择 1 上选择了 A,所以在选择 2 选项 A 将被禁用,上面的链接仍然没有回答,因为当我选择牛奶时,在select 2牛奶中依然启用
  • @ezles88 milk 启用 => jsfiddle.net/e9zwm0cj => 它是来自该副本的解决方案

标签: html jquery select dropdown option


【解决方案1】:

您可以确保在页面加载时禁用来自#pr_bundling 的初始选择,方法是将更新代码移动到函数中并在$(document).ready 上调用它(直接或通过.trigger)。

function update_select() {
  let selected = $('#pr_bundling').val();
  $("#pr_cross").find("option").each(function() {
    $(this).removeAttr("disabled");
  });
  $("#pr_cross [value=" + selected + "]").attr("disabled", "disabled");
}
$(document).ready(function() {
  $("#pr_bundling").change(update_select);
  update_select();
  // or you can trigger the change handler:
  // $("#pr_bundling").trigger('change');
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<h3>select 1</h3>
<select class="form-control" id="pr_bundling">
  <option value='noselect99' selected>Select</option>
  <option value="A" selected>A</option>
  <option value="B">B</option>
  <option value="C">C</option>
</select>
<br>

<h3>select 2</h3>
<select class="form-control" id="pr_cross">
  <option value='noselect29' selected>Select</option>
  <option value="A">A</option>
  <option value="B">B</option>
  <option value="C">C</option>
  <option value="D">D</option>
</select>

【讨论】:

  • $("#pr_bundling").trigger('change');也可以使用。
  • @thinktwice 好点;我已经更新了答案,并附上了相关注释,并将代码作为注释包含在内。
【解决方案2】:

禁用select 2的值时选择器错误。

$("#pr_cross option[value=" + $(this).val() + "]").attr("disabled","disabled");

jsfiddle:https://jsfiddle.net/bs7h0got/

【讨论】:

  • 选择 2 中的值仍未禁用兄弟
  • 您已经编写了更改代码,尝试更改选择 1 的值,它应该相应地反映在选择 2 上。
  • 正如我在尼克的回答中提到的那样,添加 $("#pr_bundling").trigger('change');在您的 javascript 结束时也可以解决问题。
猜你喜欢
  • 2012-02-23
  • 2020-01-18
  • 1970-01-01
  • 2016-01-13
  • 1970-01-01
  • 2023-04-09
  • 1970-01-01
  • 1970-01-01
  • 2020-10-18
相关资源
最近更新 更多