我有一个文本输入字段,称为 $nameEditor
. 我想在按下按钮时显示此文本字段,并在 blur
或按下退出键时将其隐藏 .
隐藏在 blur
上的字段每次都有效 .
按下退出键时隐藏字段仅在第一次时起作用 . 事件的示例顺序 .
1)按 show
s文本输入字段的按钮 . 2)按转义 - 文本输入字段 hide
s 3)再次按 show
s文本输入字段的按钮 . 4)按下转义 - 未触发键盘事件5)按任何其他键并触发键盘事件6)按转义 - 文本输入字段 hide
s
相关标记:
<button id="renameButton" title="Rename" data-icon="ui-icon-pencil">Rename</button>
<span id="assemblyNameView">Assembly Name</span>
<input id="assemblyNameEditor" style="display:none" class="ui-corner-all widget">
相关脚本:
var $renameButton = $("#renameButton");
var $nameViewer = $('#assemblyNameView');
var $nameEditor = $('#assemblyNameEditor');
function cancelEdit() {
$nameEditor.hide();
$nameViewer.show();
}
function initEdit() {
$nameViewer.hide();
$nameEditor.val($nameViewer.text()).show().select();
}
function commitEdit(newName) {
// TODO: Update the structure being edited.
$nameEditor.hide();
$nameViewer.text(newName);
$nameViewer.show();
}
$renameButton.click(initEdit);
$nameEditor.blur(cancelEdit);
$nameEditor.keyup(function(e) {
console.log(e);
if (e.keyCode === 13) {
var newName = val();
if (newName === '') {
alert("No name specified.");
$nameEditor.val($nameViewer.text()).select();
e.preventDefault();
return false;
}
commitEdit(newName);
}
else if (e.keyCode === 27) {
cancelEdit();
}
});
为什么在输入框被隐藏然后重新显示后,转义键不会触发键盘事件?
1 回答
这里错了's hard to explain what' . 当按钮和文本框都获得焦点时会产生奇怪的效果?在标准UI界面中这是不可能的 . 实际上,当您键入ESC,Enter,Space等键以外的键时,键入的字符在文本框中显示为OK,之后只有文本框才会获得焦点 . 但是,如果你键入ESC,Enter,Space ......按键似乎会对按钮产生影响,我甚至可以看到按钮上有一些颜色效果,表明它当前是聚焦的 . 这看起来确实是一个错误 .
但是为了解决这个问题,我尝试在
.select()
之后使用focus()
显式附加,它运行正常 .演示 .