javascript - jQuery - 按键触发重新加载并且不应该
问题描述
我有一个表单,它使用 jQuery 创建在某些情况下要求管理员批准的代码。如果较低级别的用户尝试提高自己的级别,我现在正在专门处理的实例要求管理员批准(如果比他们更高的人允许,则可以允许)。
对于页面上的其他几个inputs
,我运行以下代码以接受“Enter”键上的笔划,以代替按下“提交”按钮。
$('input[kind="pw1"]').keyup(function (key) {
var enterKey = key.which;
if (enterKey == 13) {
$("#submit2").trigger("click");
}
});
这实际上适用于我迄今为止所做的每一个输入,除了我用于用户输入更高级别密码的那个。它与上面的代码完全相同,只是它input[kind="adPw"]
指定了 Admin Approval 输入。它不会触发点击提交按钮,而是尝试重新加载页面。
到目前为止,我已经尝试了很多不同的修复方法:
- 通过 ID 呼叫
- 解除对所有其他点击的绑定
inputs
- 解除对所有其他点击的绑定
.button
- 取消绑定其他点击就这个
input
- 检查所有代码以获取将其链接到重新加载的任何内容
input
- 检查所有代码是否有任何链接到
input
重新加载的内容
我也做了一些研究,但我没有找到任何针对我遇到的问题的目标。我也没有在控制台中收到任何错误或警告,而且我 99% 确定我的所有标签都已正确关闭。
我正在链接到下面的 JSFiddle,以便您也可以体验这个疯狂的事情。我已经对其进行了重新编码,以加快您在那里的时间。它将为您创建两个用户:管理员和普通用户,然后它将重新加载页面。当它发生时,请按照下列步骤操作:
- 以普通用户登录(U:“tester”,P:“password”)
- “回车键”代码在用户名
input
和password
输入上都有效,而且在这里绝对有效!
- “回车键”代码在用户名
- 点击“管理用户”
- 将测试人员的级别更改为“2 级”
- 点击“保存更改”
这是管理员批准框。如果点击提交按钮,它会给出alert
“sub2”,表示点击了按钮。如果您在input
框中按“Enter”,它应该做同样的事情,但它会尝试重新加载页面。
解决方案
Enter在单个输入中按下<form>
将自动提交表单。这是大多数浏览器的怪癖。
这个特定区域是唯一存在问题的区域的原因是因为您的所有其他<form>
区域至少有两个输入。
最简单的解决方法是在表单中添加另一个(隐藏的)输入:
<form>
<input type="text">
<input type="text" style="display: none;" />
</form>
原文:(演示单输入表单怪癖)
$("#adPw").keyup(function(key) {
var enterKey = key.which;
if (enterKey == 13) {
$("#submit2").trigger("click");
}
});
$("#submit2").on("click", function() {
alert("sub2");
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<form><label>Please enter a password from a Level 1 or Level 2 User.</label><br><input type="password" id="adPw"></form>
<span class="button" id="submit2">Submit</span>
解决方案:(添加了额外的输入)
$("#adPw").keyup(function(key) {
var enterKey = key.which;
if (enterKey == 13) {
$("#submit2").trigger("click");
}
});
$("#submit2").on("click", function() {
alert("sub2");
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<form><label>Please enter a password from a Level 1 or Level 2 User.</label><br><input type="password" id="adPw"><input style="display: none"></form>
<span class="button" id="submit2">Submit</span>
这是您更新的 JSFiddle,添加了这个额外的输入(无论出于何种原因,OP 的代码在 JSFiddle 中都不起作用):https ://jsfiddle.net/18chywap/
请参阅此问题以获取更多信息: Why does forms with single input field submit on press enter key in input
推荐阅读
- web-audio-api - Web Audio API 振荡器不会发出任何声音
- javascript - 将 Async/Await 与 Promise.all 与 for 循环一起使用
- vb.net - 连接到 Oracle 10g
- swift - SwiftUI - 如何在点击时更改按钮的图像?
- r - R闪亮将文件输入限制为文件名模式而不仅仅是文件类型
- c - 在 gcc/ld 中创建一个默认为外部定义符号别名的函数
- python - Google Colab 代码更改总是产生“TabError:缩进中制表符和空格的使用不一致”
- javascript - 如何组织我的 Javascript 对象/模块?
- python - 启动我的 Mac 时如何让 Python 程序运行?
- algorithm - 为什么安徒生的指针分析算法是迭代的?