javascript - 转义键未触发 keyup 事件

标签 javascript html jquery css jquery-events

我有一个名为 $nameEditor 的文本输入字段。我想在按下按钮时显示此文本字段,并在模糊时或按下 escape 键时隐藏它。

隐藏模糊上的字段每次都有效。

按下退出键时隐藏字段仅在第一次有效。事件序列示例。

  1. 按下显示文本输入字段的按钮。
  2. 按转义键 - 文本输入字段隐藏s
  3. 再次按下显示文本输入字段的按钮。
  4. 按 Esc 键 - 未触发 keyup 事件
  5. 按任何其他键都会触发 keyup 事件
  6. 按 escape - 文本输入字段隐藏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();
  }
});

为什么输入框隐藏然后重新显示后escape键没有触发keyup事件?

最佳答案

很难解释这里出了什么问题。当按钮和文本框都获得焦点时有奇怪的效果?这在标准的 UI 界面中是不可能的。事实上,当您键入除 ESCEnterSpace 等键以外的键时,键入的字符在文本框中显示正常,并且之后只有文本框获得焦点。但是,如果您输入 ESCEnterSpace...按键似乎会影响按钮,我什至可以看到有一些颜色按钮上的效果表明它当前处于焦点状态。这看起来确实是一个错误。

但是为了解决这个问题,我尝试使用在 .select() 之后显式附加的 focus() 并且它工作正常。

function initEdit() {
  $nameViewer.hide();
  $nameEditor.val($nameViewer.text()).show().select().focus();
}

Demo.

关于javascript - 转义键未触发 keyup 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23793690/

相关文章:

html - 使用HTML播放实时视频

ie7 中的 jquery 1.4.2 添加 name 属性作为submitName

javascript - iframe 中的 Google 电子表格以 htmlview 模式打开,而不是在较小的屏幕中以编辑模式打开?

javascript - 特雷弗爵士未定义

php - 在 PHP/MySQL/JavaScript 系统中计算时差

javascript - 将 Kendo Web Draggable 绑定(bind)到动态生成的 div

javascript - 在我的 meteor 应用程序上添加 Google map

javascript - 服务器端表单处理和检索客户端的服务器响应

javascript - 想要一个 javascript 函数每分钟运行一次,但最多运行 3 次

javascript - 我可以将元素上的事件恢复到操作之前的状态吗?