如何使用原生的 JavaScript 代码,触发 SAP UI5 按钮控件的点击事件处理函数

简介: 我有个 UI5 按钮,想用原生 js 去触发 click 事件。在 dom 上检测到 click 已经触发了,但是按按钮的动作响应没有发生。请问如何解决,谢谢。

我的技术交流群里,有朋友提问:


我有个 UI5 按钮,想用原生 js 去触发 click 事件。在 dom 上检测到 click 已经触发了,但是按按钮的动作响应没有发生。请问如何解决,谢谢。


image.png


解决这个问题的理论依据:深入学习SAP UI5框架代码系列之三:HTML原生事件 VS UI5 Semantic事件


我写了一个简单的 SAP UI5 应用,index.html 的完整代码贴在本文末尾。


image.png


第一个按钮的点击事件处理函数,逻辑为在其显示文本的末尾添加1,比如触发一次后,button text 显示为 Button 11,依次类推。


image.png


方法1:使用 SAP UI5 API 触发第一个 button 的点击事件处理函数

见第 33 行代码。拿到 第一个 button 实例后,直接调用 SAP UI5 API firePress,触发第一个按钮的事件点击处理函数。


image.png


方法2:使用 JavaScript 原生 API 触发第一个 button 的点击事件处理函数

见第 33 行代码。拿到 第一个 button 实例后,直接调用 SAP UI5 API firePress,触发第一个按钮的事件点击处理函数。


见下图第 45~46 行:


image.png


两种方式均能按照期望触发第一个按钮的点击事件处理函数,效果如下视频所示:


https://www.zhihu.com/zvideo/1370102151998468096


本应用的完整代码如下:可以使用 Jerry 文章 一个用于SAP UI5学习的脚手架应用,没有任何后台API的依赖 提到的 脚手架应用运行。

<!DOCTYPE html>
<html>
<head>
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta charset="utf-8">
  <title>SAPUI5 Sandbox</title>
  <script
    id="sap-ui-bootstrap"
    src="https://openui5.hana.ondemand.com/resources/sap-ui-core.js"
    data-sap-ui-theme="sap_belize"
    data-sap-ui-libs="sap.ui.commons"
    data-sap-ui-compatVersion="edge"
    data-sap-ui-preload="async">
  </script>
  <script>
    sap.ui.getCore().attachInit(function () {
      var oButton1 = new sap.ui.commons.Button({
        text : "Button 1",
        tooltip : "This is a test tooltip",
        press : function() {
          var origin = oButton1.getText();
          oButton1.setText(origin + '1');
        }
      });
      var oButton2 = new sap.ui.commons.Button({
        text : "用 SAP UI5 API 触发第一个按钮的点击处理函数",
        tooltip : "This is a test tooltip",
        press : function() {
          var origin = oButton2.getText();
          oButton2.setText(origin + '2');
          oButton1.firePress();
          debugger;
        }
      });
      var oButton3 = new sap.ui.commons.Button({
        text : "用 js 原生 API 触发第一个按钮的点击处理函数",
        tooltip : "This is a test tooltip",
        press : function() {
          var origin = oButton2.getText();
          oButton3.setText(origin + '3');
          var a = document.getElementById("__button0");
          a.click();
        }
      });
      var oVerticalLayout = new sap.ui.layout.VerticalLayout();
      oVerticalLayout.addContent(oButton1);
      oVerticalLayout.addContent(oButton2);
      oVerticalLayout.addContent(oButton3);
    /*var oModel = new sap.ui.model.json.JSONModel();
    var myData = {"field_for_text": "Jerry"};
    oModel.setData(myData);
    oButton1.setModel(oModel);
    oButton1.bindProperty("text", "/field_for_text", undefined, "OneTime");
    myData["field_for_text"] = "Tom";
    oModel.checkUpdate();
    oButton1.attachEvent("_change", function(oEvent) {
        var oChangeDetail = oEvent.getParameters();
        debugger;
      });*/
    oVerticalLayout.placeAt("content");
    });
  </script>
</head>
<body class="sapUiBody" role="application">
  <div id="content"></div>
</body>
</html>
相关文章
|
4天前
如何在用户登录时sap时触发一特定程序执行
如何在用户登录时sap时触发一特定程序执行
|
4天前
|
JavaScript 计算机视觉
原生js通过年龄判断是否可以抽奖
原生js通过年龄判断是否可以抽奖
9 0
|
5天前
|
存储 JavaScript 前端开发
原生JS如何实现验证码
原生JS如何实现验证码
10 0
|
5天前
|
JavaScript 安全 前端开发
原生JS实现一键复制,一键粘贴
原生JS实现一键复制,一键粘贴
11 0
|
15天前
|
前端开发 JavaScript 调度
原生JavaScript实现弹幕组件
原生JavaScript实现弹幕组件
|
17天前
|
JavaScript 前端开发
js原生自调用函数原理
JavaScript中的IIFE(Immediately Invoked Function Expression)是定义后立即执行的函数表达式。它有两种实现方式:匿名函数表达式 `(function() { /* 函数体 */ })()` 和命名函数声明 `(function myFunction() { /* 函数体 */ })()`。IIFE提供封闭作用域,防止变量冲突,常用于创建私有作用域、封装代码和避免变量提升问题。执行后,IIFE内部的变量和函数会被销毁,除非被特意暴露。
|
17天前
|
存储 JavaScript 前端开发
js原生方法,获取url上面所有参数,并返回一个对象
JavaScript函数`getUrlParameters`用于从URL中提取所有参数并返回一个键值对对象。它接收URL,分割查询字符串,解码参数对,并存储在对象中。重复参数键会被存储为数组。
|
18天前
|
JavaScript 前端开发 BI
原生html—摆脱ps、excel 在线绘制财务表格加水印(html绘制表格js加水印)
原生html—摆脱ps、excel 在线绘制财务表格加水印(html绘制表格js加水印)
20 1
|
21天前
|
移动开发 JavaScript HTML5
input | pattern | oninvalid | setCustomValidity | html5原生js表单校验
input | pattern | oninvalid | setCustomValidity | html5原生js表单校验
16 0
|
21天前
|
JavaScript
Vue与原生JS中方法调用
Vue与原生JS中方法调用
8 0

热门文章

最新文章