我在 SAPUI5 应用程序中有一个 Detail 视图,其中包含一个 ID 的输入字段"bestellmenge_tu"。每当调用此视图时,焦点应位于该输入字段上。不幸的是,当在控制器的onInit方法中将焦点设置在字段上时,焦点将被设置,但几毫秒后 UI5 将其拿走并将其转移到详细信息视图的“导航返回”按钮。
通过将 alog.trace()放在输入字段的blur事件上,我发现焦点被一个sap.ui.define.NavContainer._afterTransitionCallback被调用的方法夺走了,该方法被异步调用(window.setTimeout触发器和执行之间的一些s)。该函数只是在视图中查找第一个可聚焦的元素,然后粗暴地将焦点切换到它上面。
我的解决方法是重新定义jQuery.fn.firstFocusableDomRef用于查找“第一个可聚焦元素”的方法:
// DIESE KANONE FUNKTIONIERT
jQuery.fn.firstFocusableDomRef = (function() {
var _default = jQuery.fn.firstFocusableDomRef;
return function() {
var bestellmenge_tu = document.querySelector("input[id$='bestellmenge_tu-inner']");
if (bestellmenge_tu &&
bestellmenge_tu.style.display !="none" &&
bestellmenge_tu.style.visibility != "hidden") return bestellmenge_tu;
else return _default.apply(this);
}
})();
Run Code Online (Sandbox Code Playgroud)
但这可能是一个性能问题(querySelector在此后的任何页面加载的DOM 横向期间调用),并且对于所需的效果来说代码太多。
有没有更简单的方法来实现这一目标?
我想到了类似的东西
<mvc:View controllerName="zrt_dispo.view.Detail"...>
<Page id="detailPage" initialFocus="bestellmenge_tu"> <!-- ID of the element to …Run Code Online (Sandbox Code Playgroud) sapui5 ×1