当我失去焦点时,不会触发ng模糊

ng-blur is not triggered when I lose focus

本文关键字:ng 模糊 失去 焦点      更新时间:2023-09-26

所以我一直试图通过双击来更改播放列表的标题。

我使用ng blur来知道何时我在编辑上失去了焦点,但doneEditing函数从未被调用。(editTitle和done editing只需将playlist.editing设置为true和false,console.log编辑和done编辑)。

.html

<html>
  <head>
    <meta charset="UTF-8">
    <title>Playlist</title>
    <link rel="stylesheet" href="css/reset.css">
    <link rel="stylesheet" href="css/style.css">    
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.0.7/angular.min.js"></script>
  </head>
  <body>
    <article ng-app>
      <div class="todo-wrapper" ng-controller="TodoCtrl">
        <h2 ng-hide="playlist.editing" ng-dblclick="editTitle(playlist)">{{playlist.title}}</h2> 
        <input ng-show="playlist.editing" ng-model="playlist.title" ng-blur="doneEditing(playlist)" autofocus />
        <ul>
          <li ng-repeat="todo in todos">
            <input type="checkbox" ng-model="todo.done"/>
            <span class="done-{{todo.done}}">{{todo.text}}</span>
          </li>
        </ul>
        <form>
          <input class="add-input" placeholder="I need to..." type="text" ng-model="formTodoText" />
          <button class="add-btn" ng-click="addTodo()"><h2>Add</h2></button>
        </form>
        <button class="clear-btn" ng-click="clearCompleted()">Clear completed</button>
      </div>
    </article>
  <script src="js/index.js"></script>
  <script src='http://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js'></script>
  </body>
</html>

.js

function TodoCtrl($scope) {
  $scope.todos = [
    {text:'Movie1', done:false},         
    {text:'Movie2', done:false}
  ];
  $scope.playlist = {title: "New Playlist", editing:false};
  $scope.getTotalTodos = function () {
    return $scope.todos.length;
  }; 
  $scope.addTodo = function () {
    $scope.todos.push({text:$scope.formTodoText, done:false});
    $scope.formTodoText = '';
  };
  $scope.clearCompleted = function () {
        $scope.todos = _.filter($scope.todos, function(todo){
            return !todo.done;
        });
  };
  $scope.editTitle = function (playlist) {
      playlist.editing = true;
  };
  $scope.doneEditing = function (playlist) {
      playlist.editing = false;
  };
}

我不确定我做错了什么,因为我在小提琴上找到的例子(http://jsfiddle.net/davekr/F7K63/43/)使用这些线路运行良好。

附言:我已经测试过在Firefox和Chrome上运行代码,doneEditing函数从未被调用过。

编辑:上传了完整的.html和.js文件

您需要将ng-model="playlist.title"添加到输入标签

<h2 ng-hide="playlist.editing" ng-click="editTitle(playlist)">{{playlist.title}}</h2> 
<input ng-show="playlist.editing" ng-model="playlist.title" ng-blur="doneEditing(playlist)" autofocus />

如果你把console.log("foo");添加到doneEditing函数中,你可以看到它在中正常工作

编辑

这是一个plunkerhttps://plnkr.co/edit/LoW9nkhYO5BIaOzuaxOX?p=preview

将AngularJS更新到最新版本或至少1.2<