javascript - JavaScript addEventListeners 未从 Web 应用程序的脚本文件运行
问题描述
我已经经历了许多关于 JavaScript 中无法运行的 EventListeners 的其他线程,但似乎没有人遇到我目前遇到的问题。
我有一系列按钮,我想在我的网页上触发一些表单,以便在点击时显示。我已经编写了一系列语句来将 eventListeners 添加到按钮(通过元素 ID 选择),它调用了一个将表单的显示切换为 flex 的函数(表单的显示属性在外部 css 文件中设置为 none)点击时(按班级选择)。
添加事件监听器的语句:
document.getElementById("login").addEventListener("click", function(){
document.querySelector('.login-menu').style.display="flex";
});
document.getElementById("register").addEventListener("click", function(){
document.querySelector('.reg-menu').style.display="flex";
});
document.getElementById("addTopic").addEventListener("click", function(){
document.querySelector('.topic-form-container').style.display="flex";
});
document.getElementById("claim-reply-button").addEventListener("click", function(){
document.querySelector('.reply-to-claimform-container').style.display="flex";
});
document.getElementById("reply-button").addEventListener("click", function(){
document.querySelector('.reply-to-reply-form-container').style.display="flex";
});
document.getElementById("addClaim").addEventListener("click", function(){
document.querySelector('.claim-form-container').style.display="flex";
});
前两个按钮(登录和注册)是页面导航栏的按钮,工作正常。但是,由于某种原因,其他事件侦听器无法正常工作。我还通过开发人员窗口中的控制台运行了这些语句,当我这样做时,它添加了 eventListener 并且按钮工作正常。脚本在标签关闭之前被链接,因此脚本不会在 HTML 元素之前加载。
为了简洁起见,这里是没有出现的 HTML 表单。
<div id='topic-form' class='topic-form-container'>
<form method='POST' id='topic-form' action='/'>
<label for="title">Title</label>
<input type='text'
id='topic-title'
name='title'
size="35 rem"
placeholder='Enter Topic Title: 200 characters or less'>
<button type="submit" class="btn btn-primary">Add a topic</button>
</form>
</div>
<div id="claim-form" class="claim-form-container">
<form method='POST' id='claim-form' action='/post_claim'>
<label for="title">Title</label>
<input type='text'
id='claim-title'
name='title'
size='35 rem'
placeholder='Enter Claim Title: 200 characters or less'>
<label for='text-body'>Text Body</label>
<textarea name='text' rows='4' cols='50' placeholder='Enter description: 500 characters or less'></textarea>
<label for='relation'>Select relation:</label>
<select name='relation' id='claim-relation'>
<option value='opposed'>Opposed</option>
<option value='equivalent'>Equivalent</option>
<option value='none'>None</option>
</select>
<button type='submit' class="btn btn-primary">Add a claim</button>
</form>
</div>
<div id="reply-to-claim-form" class="reply-to-claim-form-container">
<form method='POST' id='reply-to-claim-form' action='/post_reply'>
<label for='text-body'>Reply</label>
<textarea name='text' rows='4' cols='50' placeholder='Enter description: 500 characters or less'></textarea>
<label for='relation'>Select relation:</label>
<select name='relation'>Select relation
<option value='clarification'>Clarification</option>
<option value='support'>Supporting argument</option>
<option value='counter'>Counterargument</option>
</select>
<button type='submit' class="btn btn-primary">Reply</button>
</form>
</div>
<div id="reply-to-reply-form" class="reply-to-reply-form-container">
<form method='POST' id='reply-to-reply-form' action='/post_reply'>
<label for='text-body'>Reply</label>
<textarea name='text' rows='4' cols='50' placeholder='Enter description: 500 characters or less'></textarea>
<label for='relation'>Select relation:</label>
<select name='relation'>Select relation
<option value='evidence'>Evidence</option>
<option value='support'>Support</option>
<option value='rebuttal'>Rebuttal</option>
</select>
<button type='submit' class="btn btn-primary">Reply</button>
</form>
</div>
<script type="text/javascript"
src="{{ url_for('static', filename='forumScript.js') }}"></script>
此外,为了简洁起见,这里是我添加 eventListeners 的按钮(注意,我在 web 应用程序的某些方面使用 jinja,这些按钮在用户登录时有条件地出现。我正在登录我的 web 时测试这个应用程序。):
{%if 'username' in session%}<button type="button" id="addClaim">Add a new claim in this topic</button>
{% endif %}
{% if 'username' in session %}<div class='claim-list-reply'><button type=button id='claim-reply-button'>Reply to claim</button></div> {% endif %}
{% if 'username' in session%}<button type="button" id="addTopic">Add a new topic</button>{% endif %}
{% if 'username' in session %}<button type='button' id='reply-button'>Reply</button>{% endif %}
为了清楚起见,这些按钮包含在一个
非常感谢。
解决方案
我能够在我自己的一个 Flask 应用程序中复制您的代码来测试它(使用与我的应用程序相关的不同 Jinja if 语句)并让它工作。我注意到了几件事:
在您之前的评论之一中,您的文件名是,
'forumIndexScript.js'
但在您编辑的问题中,文件名是'forumScript.js'
如此仔细检查以确保准确性。您可能还想检查您的文件是否在静态文件夹中并且没有嵌套,或者如果是则更新脚本的源代码。我假设其他文件通过您的 url_for('static') 路径正确加载,因为您提到了 CSS 文件。根据您提供的内容,很难判断这是否是 CSS 问题,例如另一个文件/元素/类/样式冲突。
顺便说一句,.reply-to-**claimform**-container
您的 JS 代码中也有一个错字,但这不应该影响其他代码。我希望这会有所帮助,如果没有,您会找到解决方案!
推荐阅读
- python-3.x - 无法使用 Python 登录加密的银行网站
- amazon-web-services - 由于 100% cpu 利用率导致 AWS Aurora 超时
- codeigniter - Codeigniter 用 ID 中的 OR 条件更新数据
- vue.js - Vuex 状态更改不会传播到 Vue 组件模板
- html - 在纯 CSS 滑出菜单上设置动画宽度时遇到问题
- node.js - JWT-Node 身份验证 - req.headers[''authorization"] 未定义
- reactjs - 盖茨比有缓慢的交互和延迟响应
- python - 在评估 GPT2 模型时计算损失和困惑,即使没有定义
- c# - 如何修复仅在某些计算机上发生的 NullReferenceException
- javascript - 如何过滤javascript中嵌套数组中存在的对象数组