【问题标题】:Angular material menu fires click event 2 times in mobile devicesAngular 材质菜单在移动设备中触发 2 次点击事件
【发布时间】:2017-11-15 07:23:16
【问题描述】:

我已经从演示中实现了一个简单的角材质侧菜单。但这会在移动浏览器的整个页面中触发所有点击事件 2 次。 您甚至可以在 chrome 模拟器中看到这一点。 (单击 chrome 开发工具中的切换设备工具栏后运行此 sn-p)。

我搜索了很多。但没有运气。你们能找出问题所在吗。至少给我一个解决方法来一次性触发所有点击事件。

var app = angular.module('myapp', ['ngMaterial']);

app.controller('MyController', function($scope, $mdSidenav) {
  $scope.isSidenavOpen = false;
    
  $scope.openLeftMenu = function() {
    $mdSidenav('left').toggle();
  };
    
});
$(document).ready(function () {
	$("#tst2").click(function () {console.log("hai");});
});
    
      <link rel="stylesheet" type="text/css" href="https://ajax.googleapis.com/ajax/libs/angular_material/0.8.3/angular-material.min.css">
    
  
    
      <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.15/angular.min.js"></script>
    
  
    
      <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.15/angular-animate.min.js"></script>
    
  
    
      <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.15/angular-aria.min.js"></script>
    
  
    
      <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/angular_material/0.8.3/angular-material.min.js"></script>
    
  
    
      <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    
  
  <div ng-app="myapp">
    <div layout="row" ng-controller="MyController">
        <md-sidenav md-component-id="left" md-is-open="isSidenavOpen" class="md-sidenav-left">
            Left Nav!
        </md-sidenav>
         <md-content>
            <md-button ng-click="openLeftMenu()">
              Open Side Nav
            </md-button>
          </md-content>
    </div>
</div>
<div id="tst2">
       text demo content sidebar left open and close text text
</div>

【问题讨论】:

    标签: javascript jquery html angularjs angular-material


    【解决方案1】:

    click 事件替换为mousedown 事件,因为显然click 事件被两个事件touchstartmousedown 替换,这两个事件都受移动设备支持(有关更多信息,请参阅this issue )

    var app = angular.module('myapp', ['ngMaterial']);
    
    app.controller('MyController', function($scope, $mdSidenav) {
      $scope.isSidenavOpen = false;
    
      $scope.openLeftMenu = function() {
        $mdSidenav('left').toggle();
      };
    
    });
    $(document).ready(function() {
      $("#tst2").mousedown(function() {
        console.log("hai");
      });
    });
    <link rel="stylesheet" type="text/css" href="https://ajax.googleapis.com/ajax/libs/angular_material/0.8.3/angular-material.min.css">
    <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.15/angular.min.js"></script>
    <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.15/angular-animate.min.js"></script>
    <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.15/angular-aria.min.js"></script>
    <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/angular_material/0.8.3/angular-material.min.js"></script>
    <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    
    <div ng-app="myapp">
      <div layout="row" ng-controller="MyController">
        <md-sidenav md-component-id="left" md-is-open="isSidenavOpen" class="md-sidenav-left">
          Left Nav!
        </md-sidenav>
        <md-content>
          <md-button ng-click="openLeftMenu()">
            Open Side Nav
          </md-button>
        </md-content>
      </div>
    </div>
    <div id="tst2">
      text demo content sidebar left open and close text text
    </div>

    【讨论】:

    • 我现在正在做同样的事情。但是在mousedown 中获取所有东西绝对是一种开销。因为如果我使用这个我有更多的表单,我必须手动检查每个 html5 验证。这很难吧?
    • 我没有明白你的意思,但如果你想在 AngularJS 中正确处理点击事件,请使用ngClick directive。这是 AngularJS 的方法。
    • ngClick 没有帮助:(
    • ngClick 没有帮助”是什么意思?如果它没有帮助就很奇怪,因为它是处理点击事件的 Angular 方式!使用 mousedown 事件而不是 click 事件有什么问题?我没有收到您的第一条评论。
    • ngClick 也将点击事件加倍。在这两个地方使用mousedown 将使html5 验证在javascript 中手动验证。如果我可以使用 onclick html5 验证将被自动处理
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-06
    相关资源
    最近更新 更多