SmartGWT TextField更改插入位置

时间:2011-11-23 10:08:29

标签: java gwt textfield smartgwt

我有一个DynamicForm,其中放置了TextField。它们位于自定义控制器的视图中(如表单)。 当用户在此字段中键入一些文本时,将显示具有可用(合适)文本值的ListGrid。 此ListGrid通过DataSource fetching从服务器检索数据。在dataArrived event我有一些逻辑,并决定是否发送另一个服务器请求,并将焦点放在TextField

form.focusInItem(item);

奇怪的行为发生在IE中。数据到达后,光标放在TextField的最开头。 在Mozilla,Chrome数据到达后,文本字段可能会失去焦点(即使在聚焦后)。焦点放在其他地方(介于textField和advice网格之间)。我可以在控制器的视图中使用Tab键进行下一步控制,然后按Shift + Tab键回到TextField

不知道为什么会这样。调试它时看不到任何奇怪的东西。 也许有人在使用SmartGWT文本控件时遇到了这样的问题?

2 个答案:

答案 0 :(得分:1)

正如您发现的评论所说,这是IE的原生限制。但是,如果通过fetchData()的dsRequest属性参数传递rpcRequest.showPrompt:false,则可以避免焦点离开该字段。

此外,在完成提取后,焦点应该已恢复到文本字段,并且我们已经自动化测试显示了这种情况。如果您发现没有发生这种情况的情况,请随时提交测试用例 - 但如果是这样,请确保提及您的GWT和SmartGWT版本以及所涉及的任何第三方库。

答案 1 :(得分:0)

发现了这种奇怪行为的原因。

//> @method formItem.getSelectionRange()
// For text-based items, this method returns the indices of the start/end of the current
// selection. Returns null if the item doesn't have focus. 
// <P>
// Notes:
// <UL>
//   <LI>In Internet Explorer, if the item has lost focus since the selection was made,
// only the start (current caret position) is returned. This is a limitation of Internet
// Explorer.</LI>
// If the item doesn't have focus always return null
    // Natively the method we use in Moz would give us back the last selection, but the
    // method we use in IE can't give us anything meaningful.

取自 FormItem.js

因此,在服务器返回一部分数据(dataArrived事件)之后,获取到ListGridTextField的数据失去了焦点。当我们手动将焦点放回文本字段(form.focusInItem(item);)时,选择是(0,0) - 字段的开头。但只在IE中。因此,我们必须在获取数据之前保存最后的选择,然后在将焦点手动放回文本字段后应用此选择。 在完成所有数据操作之后,在进行焦点和设置选择之前,我们必须执行form.redraw();