我正在尝试实现一种用于数据输入的“引导式打字”小部件,其中用户的文本条目被高度控制和过滤。当用户键入特定字符时,我需要在窗口小部件中显示它之前拦截并过滤它。想象一下,如果 你将,一个Unix shell作为webapp嵌入;这就是我想要实现的那种东西。我尝试了两种方法。
首先,我展开TextArea
,然后添加KeyPressHandler
来过滤字符。这是有效的,但浏览器提供的拼写纠正是完全不合适的,我不知道如何关闭它。我试过了:
DOM.setElementProperty(textArea.getElement(), “spellcheck”,“false”);
但这似乎没有任何影响 - 我仍然得到红色下划线 “打字错误”。
在第二种方法中,我使用FocusWidget
获取KeyPress事件,使用单独的Label
或HTML
小部件将过滤后的字符呈现给用户。这可以避免拼写更正问题,但由于FocusWidget
不是TextArea
,因此浏览器会拦截某些类型字符以供内部使用;例如FireFox将使用“/”字符在页面上开始“快速查找”,点击Backspace将加载上一个网页。
有没有更好的方法来完成我想要做的事情?
答案 0 :(得分:2)
您可能只能在keypress事件上使用event.preventDefault()
来避免这些浏览器行为。否则,可能是这两种方法的混合体?隐藏TextArea
有焦点,接受关键事件,然后将输入的字符发布到单独的Label
。
答案 1 :(得分:1)
TextBox上没有针对此的特定GWT方法,但这个简单的行 GWT代码修复了Chrome的问题(对于其他浏览器,YMMV - 它可能取决于它们实现HTML5的完全程度),方法是在底层输入元素上设置一个属性:
myTextBox.getElement().setAttribute("spellCheck", "false");
也许这个属性是一个相对较新的功能。