移动网络应用程序上的 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 上运行