繁体   English   中英

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

[英]sap.m.Input change event is triggered when clicking on CheckBox

我的页面中有两个控件,即sap.m.Inputsap.m.CheckBox 如果输入文本与正则表达式不匹配,则输入字段上附加一个change事件 ,该事件 会显示错误栏 单击输入字段的焦点时触发此更改事件。 单击复选框将隐藏此输入并显示第三个控件 现在,如果我在输入字段中输入与正则表达式不匹配的内容,然后单击复选框,它将触发Input的changeEvent甚至没有选中该复选框。 我尝试了很多操作,例如检查是否在复选框中是否选中了更改事件,在复选框上附加了单击事件,但没有解决方法。 请帮助我,以便如果当前焦点位于输入字段上,那么我将能够确定单击复选框

这是jsbin的示例。 如果输入文本包含@并且触发了change事件,则会引发错误。

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]
});

在此示例中,有时并非总是发生这种情况,但是在我的项目中,由于更改事件中发生了很多验证,因此它总是发生。

@Ashish为focus尝试以下代码。

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提供的onfocusout ,而在焦点对onfocusout ,如果按Enter键将触发onkeypress事件中提供的功能。 您也可以将其合并为一个。

addEventDelegate({
  onkeypress: function(e) {
    console.log("Enter pressed fouse out", e.which);
  },
  onfocusout: function() {
    do your stuff!
  }
})

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM