weixin_58648225 2023-02-08 22:48 采纳率: 89.2%
浏览 48
已结题

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

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

                      <select name="onename" id="onename" ">
                        <option>1</option>
                        <option>2</option>
                        <option  id="dee">3</option>
                        <option  id="dee">4</option>
                      </select>
                      <select id="add" disabled=disabled>
                        <option>5</option>
                        <option>6</option>
                        <option>7</option>
                      </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等等会出现这种问题?

非常感谢

  • 写回答

4条回答 默认 最新

  • CSDN专家-showbo 2023-02-09 10:31
    关注

    用 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>
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 2月17日
  • 已采纳回答 2月9日
  • 创建了问题 2月8日

悬赏问题

  • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
  • ¥20 怎么用dlib库的算法识别小麦病虫害
  • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
  • ¥15 java写代码遇到问题,求帮助
  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?