你應該在onAfterRendering生命週期鉤子上執行你的代碼片段。這是因爲在onInit中,jQuery調用將無法找到任何輸入(因爲與您的視圖對應的元素尚未添加到DOM中)。
根據描述和代碼,我知道你需要檢查F11 + CTRL是否被按下(因此檢查是evt.keyCode == 122 && evt.ctrlKey
);如果你想要一個簡單的F11,你只需要檢查evt.keyCode == 122
。
你可以在這裏找到工作小提琴:https://jsfiddle.net/8kcs8xch/4/
onAfterRendering: function() {
jQuery("input").on("keydown",
function(evt) {
if (evt.keyCode == 122 && evt.ctrlKey) {
evt.preventDefault();
sap.m.MessageToast.show('Alert');
}
});
}
這種方法有以下限制:
- 它直接使用DOM,並就UI5控件的呈現方式的假設。
- 它將偵聽器應用於全部現有輸入。您也可以使用其他選擇器(例如CSS)進行調解。
一個相當好的解決方案是創建一個具有此事件的自定義控件。你可以在這裏找到一個例子:https://jsfiddle.net/8kcs8xch/3/
基本上你需要通過在你的新控件中聲明一個DOM處理程序來監聽keydown事件。然後,您可以基於此DOM事件定義自定義UI5事件(我簡單地稱其爲alert
):
var CustomInput = sap.m.Input.extend("CustomInput", {
metadata: {
events: {alert: {}}
},
onkeydown: function(evt) {
if (evt.keyCode == 122 && evt.ctrlKey) {
// only prevent the default of the DOM event if the
// UI5 event's preventDefault is called as well.
if (!this.fireEvent("alert", {}, true)) {
evt.preventDefault();
}
}
},
renderer: {}
});
謝謝您的評論和示例。不知道我是否理解你的第二種方法,我應該在哪裏放置自定義控件? – Tim
請檢查[文檔](https://openui5.hana.ondemand.com/#docs/guide/91f1703b6f4d1014b6dd926db0e91070.html)。簡而言之,您應該在一個單獨的.js文件中定義自定義控件,並使用適當的名稱空間(基於您的根名稱空間和文件夾結構)。然後你可以在例如一個XML視圖並使用您的控件,因爲您可以使用任何其他標準的UI5控件。 –
示例:[this](https://github.com/serban-petrescu/sbwo/blob/master/web/util/HelpVideo.js)中定義的自定義控件用於[this](https:// github。 com/serban-petrescu/sbwo/blob/master/web/fragment/dialog/HelpVideoDialog.fragment.xml)XML片段。 –