Django模板中Chosen.js无法正常显示的问题求助
问题解答:linter-jscs换行提示与Chosen.js在Django中失效问题
一、关于linter-jscs的无效换行提示
- 这个提示不会导致代码失效:JavaScript对格式的容忍度很高,换行、空格这类问题只会影响代码可读性,完全不会阻碍代码执行。linter-jscs是代码风格检查工具,它的提示只是在帮你规范代码格式,并非语法错误警告。
- 消除提示的两种方法:
- 手动格式化代码,调整成符合JSCS规范的格式,比如:
$(document).ready(function () { $('#id_facilitydimselect').chosen(); }); - 若觉得该规范没必要,可修改JSCS配置文件(如
.jscsrc),关闭对应的换行检查规则(具体规则名称可看提示信息,比如requireLineFeedAtFileEnd或disallowTrailingWhitespace等)。
- 手动格式化代码,调整成符合JSCS规范的格式,比如:
二、Chosen.js在Django模板中无法正常显示的核心问题
从你提供的模板代码来看,最关键的错误是select标签的id属性写法错误:
你当前的写法:
<select id_facilitydimselect="Choose a Facility..." class="chosen-select" multiple tabindex="4">
正确写法应该是把id属性设为id="id_facilitydimselect",提示文字用Chosen支持的data-placeholder属性,比如:
<select id="id_facilitydimselect" data-placeholder="Choose a Facility..." class="chosen-select" multiple tabindex="4">
为什么这会导致失效?因为你的初始化代码$('#id_facilitydimselect').chosen()是通过id选择元素的,但原来的select标签根本没有id="id_facilitydimselect"这个属性,jQuery找不到对应的DOM元素,自然无法初始化Chosen插件。
另外补充几个排查点(既然静态资源已加载成功):
- 确认
security_chosen.js里的初始化代码确实在DOM加载完成后执行(你用了$(document).ready,这部分是正确的)。 - 检查浏览器控制台:如果初始化时找不到元素,控制台会提示类似
Cannot read properties of undefined (reading 'chosen')的错误,可验证我们的判断。 - 规范
static标签写法:你写的{% static '/accounts/chosen.jquery.js' %}可去掉开头的斜杠,改成{% static 'accounts/chosen.jquery.js' %},这虽不影响加载,但更符合Django的规范。
内容的提问来源于stack exchange,提问作者student101
相关产品推荐
相关产品推荐

