移动网络应用程序上的 keyup 似乎仍然没有覆盖内容块

Posted

技术标签:

【中文标题】移动网络应用程序上的 keyup 似乎仍然没有覆盖内容块【英文标题】:keyup on mobile web apps seems to still not override a content block 【发布时间】:2013-03-07 20:24:08 【问题描述】:

我从输入文本框上的 keyup 事件中获得了一些输入。

$(selector).keyup(function()
  var str = $(this).val();
  var X = 2;
  var Y = 1;
  $(this).val(str.substring(X,Y));
);

在标准 web 应用程序中查看时,$(this).val() 没有新按下的键。我应该关注生命周期的哪一部分?似乎在 webapp 中执行此操作时,它似乎按计划执行,但在 ios webview/移动应用程序中使用它时却没有

编辑:

似乎这些侦听器的生命周期实际上可能有所不同。 keyup 时,它会将 $(this).val() 识别为旧内容加上新字符,而在移动设备上,它只识别旧内容。新角色很容易通过以下方式获得:

String.fromCharCode(event.which)

但在生命周期的那个时候,我不能说不删除它。我正在研究可能与其他事件相关的想法,以及执行诸如 event.preventDefault();event.stopPropagation(); 之类的事情,但我没有确定要去哪里。

任何想法如何工作和处理此类事件或侦听器都会很棒。以我目前的逻辑,当我有新的内容集时需要它。也许一个简单的 on("input") 就足够了?

高度赞赏的指导。 :)

【问题讨论】:

【参考方案1】:

keyup() 页面上的 Jquery 文档:

为了捕捉实际的文本输入,.keypress() 可能是更好的选择。

解决我的编码问题:

1) 将事件从 keyup 更改为 keypress。 2) 执行以下操作:

var reg = new RegExp("\\D");
if(reg.test(String.fromCharCode(event.which)))
  var str = $(this).val();
  var strArr = str.split("");
  // for handling when people maintain the press, 
  //    i created a range array to delete the range.
  strArr.splice(cRange[0], cRange[1]-cRange[0]+1); 
  str = strArr.join("");
  $(this).val(str);
  event.preventDefault();

【讨论】:

以上是关于移动网络应用程序上的 keyup 似乎仍然没有覆盖内容块的主要内容,如果未能解决你的问题,请参考以下文章

keyup 无法在 Android 上的 Chrome 上运行

jquery移动端键盘keyup失效

在 iPhone 上的 Web 应用程序中维护 PHP 会话

面板没有得到焦点

如何在移动网络应用程序上全屏查看网络摄像头 [重复]

注册移动设备以在外部网络中使用