单击CheckBox时会触发sap.m.Input change事件

时间:2017-06-07 04:53:31

标签: javascript html5 sapui5

我的页面中有两个控件,即 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]
});

在这个例子中,它有时并不总是发生,但在我的项目中它总是发生,因为在变更事件中发生了很多验证。

1 个答案:

答案 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!
  }
})