javascript - JavaScript 焦点:如何专注并留在那里?
问题描述
我需要以下内容:
- 用户单击复选框。
- 焦点移动到文本框。
- 并留在那里。在文本框中。
我尝试使用 Javascript:
if (rows[i].get_element().id==args.get_row().id){
var comment = mtv.getCellByColumnUniqueName(rows[i], "Comment01").getElementsByTagName('input')[0].id;
document.getElementById(comment).focus();
break;
}
它有效。焦点将进入文本框,但立即离开文本框。
但我需要将焦点留在文本框中,直到用户输入任何内容。
这是真的吗?
UPD:我所有 3 个复选框和一个文本框的 js 代码:
function gridValuesEdits(sender, args) {
clearCheckboxes(sender, args);
comments(sender, args);
}
function clearCheckboxes(sender, args)
{
switch (args.get_columnUniqueName())
{
case "chbx00":
if (args.get_editorValue())
{
var grid = $findByControlId("Grid4");
var mtv = grid.get_masterTableView();
var rows = mtv.get_dataItems();
var batchEditingManager = grid.get_batchEditingManager();
for (var i=0; i<rows.length; i++)
{
if (rows[i].get_element().id==args.get_row().id)
{
batchEditingManager.changeCellValue(rows[i]._element.cells[8], false);
batchEditingManager.changeCellValue(rows[i]._element.cells[9], false);
batchEditingManager.endUpdate();
break;
}
}
}
break;
case "chbx01":
if (args.get_editorValue())
{
var grid = $findByControlId("Grid4");
var mtv = grid.get_masterTableView();
var rows = mtv.get_dataItems();
var batchEditingManager = grid.get_batchEditingManager();
for (var i=0; i<rows.length; i++)
{
if (rows[i].get_element().id==args.get_row().id)
{
batchEditingManager.changeCellValue(rows[i]._element.cells[7], false);
batchEditingManager.changeCellValue(rows[i]._element.cells[9], false);
batchEditingManager.endUpdate();
break;
}
}
}
break;
case "chbx02":
if (args.get_editorValue())
{
var grid = $findByControlId("Grid4");
var mtv = grid.get_masterTableView();
var rows = mtv.get_dataItems();
var batchEditingManager = grid.get_batchEditingManager();
for (var i=0; i<rows.length; i++)
{
if (rows[i].get_element().id==args.get_row().id)
{
batchEditingManager.changeCellValue(rows[i]._element.cells[7], false);
batchEditingManager.changeCellValue(rows[i]._element.cells[8], false);
batchEditingManager.endUpdate();
break;
}
}
}
break;
default:
break;
}
}
function comments(sender, args)
{
switch (args.get_columnUniqueName())
{
case "chbx01":
if (args.get_editorValue())
{
var grid = $findByControlId("Grid4");
var mtv = grid.get_masterTableView();
var rows = mtv.get_dataItems();
var batchEditingManager = grid.get_batchEditingManager();
for (var i=0; i<rows.length; i++)
{
if (rows[i].get_element().id==args.get_row().id)
{
vvar comment = mtv.getCellByColumnUniqueName(rows[i], "Comment01").getElementsByTagName('input')[0].id;
document.getElementById(comment).focus();
break;
}
}
}
break;
case "chbx02":
if (args.get_editorValue())
{
var grid = $findByControlId("Grid4");
var mtv = grid.get_masterTableView();
var rows = mtv.get_dataItems();
var batchEditingManager = grid.get_batchEditingManager();
for (var i=0; i<rows.length; i++)
{
if (rows[i].get_element().id==args.get_row().id)
{
var comment = mtv.getCellByColumnUniqueName(rows[i], "Comment01").getElementsByTagName('input')[0].id;
document.getElementById(comment).focus();
break;
}
}
}
break;
default:
break;
}
}
解决方案
在您设置焦点之后,必须有其他东西“窃取”焦点。正如您在下面看到的,将焦点设置到文本框就可以了。
// When the checkbox is clicked....
document.querySelector("[type='checkbox']").addEventListener("click", function(){
let tb = document.querySelector("[type='text']");
if(this.checked){
tb.classList.remove("hidden"); // Unhide the textbox
tb.focus(); // Set the focus on the text box
} else {
tb.classList.add("hidden"); // Hide the textbox
this.focus(); // Put the focus on the checkbox
}
});
.hidden {
display:none;
}
<label><input type="checkbox">Click to add details</label>
<input type="text" class="hidden">
推荐阅读
- ruby-on-rails - Rails 在 before_save 中将字符串转换为数组,但显示为字符串
- php - PHP:一键不带回它的价值
- python - 用于向地图添加点的 python 替代方案。开车兜风
- java - AlertDialog如何处理对话框视图之外的点击
- javascript - 王牌编辑器。在自动完成中添加说明选项卡
- android - Cordova 签名的 apk 在启动画面后产生空白屏幕
- c++ - 修复了带有引用的内存布局同步变量
- html - 引导 CSS 和 JSP
- python - 如何一次打开一个文件夹以访问文件
- java - Gradle:从 fat jar 中排除 compileOnly 提供的依赖项