如何调整Django表单逻辑,使quote-text字段在页面加载时隐藏?
解决Django表单初始显示与字段切换问题
你的问题核心是页面加载时quote-form默认显示,而只有当输入的entity-name不存在于数据库时才该显示它。目前仅在输入触发keyup时逻辑正常,初始状态没处理到位,调整方案如下:
1. 给quote-form添加初始隐藏样式
页面加载时直接让表单隐藏,从根源控制初始状态:
<form id="quote-form" style="display: none;"> <label for="quote-text">Quote Text:</label> <textarea class="form-control" id="quote-text" name="quote-text" rows="3"></textarea> <button type="submit" class="btn btn-primary">Submit</button> </form>
2. 完善searchEntities函数逻辑
补充处理输入框为空的场景(比如用户清空输入时,也应隐藏表单),同时优化内容渲染的安全性:
function searchEntities() { const entityName = document.querySelector('#entity-name').value.trim(); const quoteForm = document.querySelector('#quote-form'); const searchResults = document.querySelector('#search_results'); searchResults.innerHTML = ''; // 输入为空时直接隐藏表单 if (!entityName) { quoteForm.style.display = 'none'; return; } fetch(`/search-entities/?entity_name=${entityName}`) .then(response => response.json()) .then(entities => { if (entities.length === 0) { // 无匹配实体,显示表单 quoteForm.style.display = 'block'; } else { // 有匹配实体,渲染结果并隐藏表单 entities.forEach(entity => { const p = document.createElement('p'); p.textContent = entity.name; // 用textContent避免XSS风险 searchResults.appendChild(p); }); quoteForm.style.display = 'none'; } }); }
3. 可选:页面加载时主动触发检查
如果需要确保初始状态绝对可靠,可在页面加载完成后调用一次函数:
// 在script代码末尾添加 document.addEventListener('DOMContentLoaded', searchEntities);
调整后效果:
- 页面加载时
quote-form默认隐藏 - 输入为空时保持表单隐藏
- 输入内容无匹配实体时显示表单
- 输入内容有匹配实体时隐藏表单并展示搜索结果
内容的提问来源于stack exchange,提问作者user19479943
相关产品推荐
相关产品推荐

