2014-11-03 3 views
2

У меня есть два элемента абзаца и тег ввода. Когда я нажимаю на абзац, вход должен отображаться, и абзац должен скрываться. когда вход размыт, вход должен скрываться, а абзац должен отображаться. Я попытался это, но не работаетУгловое скрытие элемента при размытии

<p ng-click="edit = true" ng-show="!edit">some text</p> 
<div ng-show="edit" ng-blur="edit = false"> 
    <input type=text name="email" ng-blur="blurUpdate()" /> 
</div> 
+2

Опечатка в вопросе или вы действительно забыли '=' после 'ng-blur'? Кроме того, попробуйте поместить 'ng-blur' на' input', а не 'div'. – sp00m

+0

Извините, опечатка. У меня есть значки внутри div. Я хочу, чтобы они тоже спрятались. –

ответ

4

Move ng-blur к input смотрите демо ниже

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

 
app.controller('homeCtrl', function($scope, $timeout) { 
 

 

 
    $scope.showEditor = function() { 
 

 
    $scope.edit = true; 
 

 
    var textbox = document.getElementById("input_email"); 
 

 
    var tmp = $scope.text 
 
    $scope.text = "" 
 

 
    $timeout(function() { 
 
     textbox.focus(); 
 

 
     $scope.text = tmp; 
 

 

 
    }); 
 

 

 

 

 

 
    } 
 

 
    $scope.blurUpdate = function() { 
 

 

 
    // add this line 
 
    $scope.edit = false; 
 

 

 
    //your code 
 

 
    } 
 

 

 
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 
<div ng-app="app"> 
 
    <div ng-controller="homeCtrl" ng-init="text='some text'"> 
 
    <p ng-click="showEditor()" ng-show="!edit">{{text}}</p> 
 
    <div ng-show="edit"> 
 
     <input type=text name="email" ng-blur="blurUpdate()" ng-model="text" id="input_email" /> 
 
    </div> 
 
    </div> 
 

 
</div>

+0

Извините, я не упоминал, что у меня есть другая функция в размытии ввода. как установить сейчас. Вопрос Отредактировано –

+0

@AbelD см. Обновленный ответ – sylwester

+0

Его показ. хорошо, но также мне нужно сосредоточиться. Прямо сейчас мне нужно дважды щелкнуть, чтобы получить фокус ввода. –

1

ngBlur совместим с входным тэгом, поэтому он не работает :

<p ng-click="edit = true" ng-show="!edit">some text</p> 
<div ng-show="edit" > 
<input type=text ng-blur="edit = false" name="email" /> 
</div> 

http://jsfiddle.net/xgp2qsww/1/

+0

Извините, я не упоминал, что у меня есть другая функция в размытии ввода. как установить сейчас. Вопрос Отредактировано –

+0

Затем вы должны изменить подход: http://jsfiddle.net/xgp2qsww/3/ ngBlur на div не полезен. Функция blurUpdate должна изменить $ scope.edit, чтобы выполнить то, что вы ищете – Michael

+0

Его показ. хорошо, но также мне нужно сосредоточиться. Прямо сейчас мне нужно дважды щелкнуть, чтобы получить фокус ввода. –

Смежные вопросы