javascript - 将js函数应用于aspx表单上面板中的所有输入
问题描述
我有 ac# WebForms 应用程序,在其中我将 onkeydown 事件添加到 Page_Load 事件的面板内的所有文本框中:
protected void Page_Load(object sender, EventArgs e)
{
foreach (var txt in panel1.Controls.OfType<TextBox>())
{
txt.Attributes.Add("onkeydown", "capsLock(event);");
}
}
以上按预期工作。panel1 中的所有文本框都有 onkeydown。这是一个例子:
<input name="ctl00$MainContent$txtFrom" type="text" id="MainContent_txtFrom" class="form-control" onkeydown="capsLock(event);">
这是我从 w3 复制的 capsLock 函数:
function capsLock() {
var input = document.getElementById("MainContent_txtFrom");
var text = document.getElementById("capslockdiv");
input.addEventListener("keydown", function (event) {
if (event.getModifierState("CapsLock")) {
text.style.display = "block";
} else {
text.style.display = "none"
}
})
};
上面的工作与 MainContent_txtFrom 的预期一样。但是,与其将每个控件添加到函数中,我更愿意将其应用于所有输入元素。我尝试将 var 输入更改为使用 getElementsByTagName("input"),但当然这不起作用。我怎样才能做到这一点?
解决方案
您是否已经在 Page_Load 中的代码中为每个输入附加了一个事件。您应该更改函数 capsLock 以接收当前设置的事件参数,然后无需查找元素并再次添加事件。
function capsLock(event) {
var text = document.getElementById("capslockdiv");
if (event.getModifierState("CapsLock")) {
text.style.display = "block";
} else {
text.style.display = "none";
}
}
推荐阅读
- google-apps-script - 无法将 Google 表单连接到 Firebase 实时数据库
- reactjs - React CSS Stylesheet 不适用于我的解决方案
- tensorflow - Sagemaker MultiModel Endpoint 自定义入口点脚本
- android - App Action 适用于 App Actions 测试工具,但不适用于 Google Assistant
- firebase - Flutter FirebaseFirestore 多个应用
- redirect - NextJS 静态页面目录更改名称使用 i18n
- sql - PostgreSQL 说明:如果某些表有数百万行,我如何查看计划?
- python - 如何重塑熊猫中的测量数据
- r - cox模型中时间无关和时间相关协变量之间的相互作用
- javascript - ASPNET Core MVC ajax 未正确传递数据