6

我想在输入中按 ENTER 时触发按钮的单击事件,我发现 AngularJS 很难。

我的观点(简化,更新):

<!doctype html>
<html lang="en" ng:app="test">
    <head>
        <meta charset="utf-8" />
        <title>Test</title>
        <link rel="stylesheet" href="css/app.css" />
    </head>
    <body ng-controller="TestController">
        <button ng-click="onButton1Click()" class="btn1">Click Me</button>
        <button ng-click="onButton2Click()" class="btn2">Don't click me</button>
        <script src="lib/jquery/jquery.js"></script>
        <script src="lib/angular/angular.js"></script>
        <script src="js/testcontroller.js"></script>
    </body>
</html>

我的这个视图的控制器:

'use strict';

angular.module('test', [])
.controller('TestController', ['$scope',
    function($scope) {

        $scope.onButton1Click = function() {
            alert("Hello");
        }

        $scope.onButton2Click = function() {
            $('.btn2').click();
        }
}])

我将所有代码简化为这个。当我点击btn2我得到这个错误

$apply 已经在进行中

不行,不能$scope.onButton1Click()直接调用,必须模拟btn1点击。

4

3 回答 3

13

你提到

在输入中按 ENTER 时触发按钮的单击事件

因此,如果可以安全地假设您可以拥有我更喜欢使用ng-submit的表单,如下所示。

<form ng-submit="clickEventFunction()">
  <input type="text"/>
  <button type="submit">Click</button>
</form>

注意按钮类型应该是submit

于 2013-04-19T14:58:24.037 回答
3

我花了一段时间才弄清楚(很多小提琴)。

<form id="nowsorting" ng-submit="getData(sc_user)">Now sorting the Soundcloud likes of <input type="text" ng-model="sc_user"><input type="submit" value="Sort"></form>

制作一个表单并使用 ng-submit 来触发事件(可能是一个函数)。

然后创建两个输入(一个是“文本”,另一个是“提交”)。

然后按 enter 应该触发 ng-submit 事件/函数。

于 2014-06-10T23:21:49.733 回答
1

我想,你只需要调用你的 $scope.onButtonClick()

请检查这个 Plunker

$scope.onKeyPress = function($event) {
   if ($event.keyCode == 13) {
      $scope.onButtonClick();
   }
};
于 2013-04-18T11:24:38.813 回答