我的页面中有两个控件,即 sap.m.Input 和 sap.m.CheckBox 。输入字段附加更改事件,如果输入文本与正则表达式不匹配,会给出错误栏。单击输入字段的焦点外,将触发此更改事件。 点击复选框将隐藏此输入并显示第三个控件。现在,如果我在输入字段中输入与正则表达式不匹配的内容并单击复选框,它将触发输入的changeEvent,甚至不选中复选框。我尝试了许多事情,例如检查更改事件是否勾选了复选框,在复选框上附加了单击事件但没有解决方案。 请帮助我,以便我能够确定点击复选框,如果当前焦点位于输入字段
以下是jsbin的示例。如果输入文本包含@并且触发了更改事件,则会抛出此错误。
var textInput = new sap.m.Text({text:"Area:"})
var inputField =new sap.m.Input("inptId",{
change:function(oEvent){
sap.ui.getCore().byId("barId").setVisible(oEvent.getParameters().value.includes("@"));
}
});
var select = new sap.m.Select("select",
{visible:false,
items:[new sap.ui.core.Item({text:"India"}),
new sap.ui.core.Item({text:"US"}),
new sap.ui.core.Item({text:"UK"})
]
})
var hBox = new sap.m.HBox({items:[textInput,inputField,select]})
var bar = new sap.m.Bar("barId",{
visible:false,
contentMiddle:new sap.m.Text({text:"Error"})
});
var chkBox = new sap.m.CheckBox("chkBxId",{
text:"Select from dropdown",
select:function(oEvent){
var selected = oEvent.getParameters().selected;
sap.ui.getCore().byId("inptId").setVisible(!selected);
sap.ui.getCore().byId("select").setVisible(selected);
sap.ui.getCore().byId("barId").setVisible(false);
}
});
var vBox = new sap.m.VBox({
items:[bar,hBox,chkBox]
});
在这个例子中,它有时并不总是发生,但在我的项目中它总是发生,因为在变更事件中发生了很多验证。
答案 0 :(得分:1)
@Ashish for focus
out尝试以下代码。
this.getView().byId("input").addEventDelegate({
onfocusout: function() {
console.log("focus lost !!");
}
}
和enter key
使用以下代码
.addEventDelegate({
onkeypress: function(e) {
if (e.which === 13) {
do your stuff;
}
}
})
一旦焦点消失,它将触发onfocusout
中提供的功能,当焦点处于按下输入键时,它将触发onkeypress
事件中提供的功能。
您也可以将其合并为一个。
addEventDelegate({
onkeypress: function(e) {
console.log("Enter pressed fouse out", e.which);
},
onfocusout: function() {
do your stuff!
}
})