You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Bootstrap/Crispy中根据select字段值禁用对应input字段

问题解决方法

核心问题点

  • JS逻辑中的判断值和实际选项值不匹配:你在models中定义的action选项值为add/delete/modify/rename,但原脚本中判断的是$(this).val()=='1',永远匹配不到,导致逻辑失效。
  • 模板中的HTML属性语法错误:你把id属性写到了class的引号范围内,属于语法错误,即使要加id也应该分开写属性。
  • 缺少初始化逻辑:页面刚加载完成时没有设置输入框的初始状态,只有触发action的change事件才会更新状态,不符合预期。

修正后的代码

1. 模板代码

{% extends "KPI_App/base.html" %}
{% load crispy_forms_tags %}

{% block content %}
<form action="" method="post" autocomplete="off" >
    {% csrf_token %}
        <div class="row">
            <div class="col-md-4">{{form.action|as_crispy_field}}</div>
        </div>
        <div class="row">
            <div class="row">{{form.existing_name|as_crispy_field}}</div>
        </div>

    <div class="row">
        <div class="col-md-8">
            <button type="submit" class="btn btn-success btn-block btn-lg"><i class="fas fa-database"></i> Submit</button>
        </div>
        <div class="col-md-4">
            <a href="{% url 'KPI_list' %}" class="btn btn-secondary btn-block btn-lg">
                <i class="fas fa-stream"></i> Back to List
            </a>
        </div>
    </div>
</form>
<script>
$(document).ready(function(){
    // 状态切换复用函数
    function toggleExistingName() {
        const selectedAction = $("select[name='action']").val();
        // 可根据业务需求修改判断条件,示例为选择add时禁用输入框,其他选项启用
        if(selectedAction === 'add'){
            $("input[name='existing_name']").prop("disabled", true);
        }else{
            $("input[name='existing_name']").prop("disabled", false);
        }
    }
    // 页面加载完成初始化状态
    toggleExistingName();
    // 监听action字段变化切换状态
    $("select[name='action']").on('change', toggleExistingName);

    // 可选逻辑:如果禁用后提交需要拿到字段值,添加提交前临时解禁逻辑
    $("form").on('submit', function(){
        $("input[name='existing_name']").prop("disabled", false);
    })
});
</script>
{% endblock content %}

说明

你不需要额外给字段分配id,crispy渲染的表单字段默认name属性就是你定义的模型字段名,用[name=字段名]选择器可以正常定位元素,不需要依赖id。你可以根据自己的业务需求修改toggleExistingName里的判断条件,比如需要选delete的时候禁用就把判断值改成'delete'即可。

内容的提问来源于stack exchange,提问作者Mohsen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 15:15:01