当相对应的id被选取的时候,对另一标签施加或者移除disabled效果

当相对应的id被选取的时候,对另一标签施加或者移除disabled效果
比如非常普通的HTML如下

                      <select name="onename" id="onename" ">
                        <option>1option>
                        <option>2option>
                        <option  id="dee">3option>
                        <option  id="dee">4option>
                      select>
                      <select id="add" disabled=disabled>
                        <option>5option>
                        <option>6option>
                        <option>7option>
                      select>
<script>
$(document).ready(function() {
  $("#onename").change(function() {
    if ($(this).id == "dee") {
      $("#add").removeAttr("disabled");
    } else {
      $("#add").attr("disabled", "disabled");
    }
  });
});
script>

是不是缺少了什么或者要添加新的标签,还有一个小问题,就是当进入页面时,从数据库里传递的数据即使是id="dee"为selected的时候,也需要先选取id不等于dee的option,然后再次回到id=dee的option之际时才会解除disabled效果

主要还是想请教这样写存在的问题,第二个问题没有被验证但是印象中好像不管disableed还是display none等等会出现这种问题?

非常感谢

用 prop设置property,attribute才是用attr,jQuery1.5以上做了区分,要注意这个,要不会出现不是自己要的控制,示例如下

<select name="onename" id="onename">
    <option>1</option>
    <option>2</option>
    <!--id起规则一些,值为要控制的select id前缀-->
    <option id="add1">3</option>
    <option id="add2">4</option>
</select>
<!--加个后缀,不要和之前出现的id一样-->
<select id="add1-select" disabled>
    <option>5</option>
    <option>6</option>
    <option>7</option>
</select>
<!--加个后缀,不要和之前出现的id一样-->
<select id="add2-select" disabled>
    <option>5</option>
    <option>6</option>
    <option>7</option>
</select>
<script src="https://g.csdnimg.cn/??lib/jquery/1.12.4/jquery.min.js"></script>
<script>
    $(document).ready(function () {
        var allIdSelector = $("#onename").find('option[id]').map(function () { return '#' + this.id +'-select'}).get().join(',');//所有包含id option的选择器
        $("#onename").change(function () {
            $(allIdSelector).prop('disabled', true);//先全部禁用要控制的select

            //this对象为select,并不是选中的option,要获取id用通过selectedIndex属性(选择的option下标)获取option后再获取id
            var optionId = this.options[this.selectedIndex].id;
            if (optionId) {//选中option有id,再启用对应的select
                $('#' + optionId +'-select').prop('disabled', false);//注意这里id加上-select
            }
        });
    });
</script>

这段代码有一处错误,应该改为:

当进入页面时,从数据库里传递的数据即使是id="dee"为selected的时候,也需要先选取id不等于dee的option,然后再次回到id=dee的option之际时才会解除disabled效果,你可以使用trigger函数,在页面加载完成之后触发onchange事件,让它获得正确的状态


<select name="onename" id="onename" ">
                                <option id=" 123">1</option>
            <option>2</option>
            <option value="dee">3</option>
            <option value="dee">4</option>
        </select>
        <select id="add" disabled=disabled>
            <option>5</option>
            <option>6</option>
            <option>7</option>
        </select>
$(document).ready(function() {
                $("#onename").change(function() {
                    if ($(this).val() == "dee") {
                     $("#add").removeAttr("disabled");
                    } else {
                        $("#add").attr("disabled", "disabled");
                    }
                });
            });

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632