2017-10-09 76 views
1

嗨我有一种情况下,当输入窗体时禁用提交按钮,只有当输入框有一些文本时启用它。清除文本输入和禁用按钮onclick Angularjs

<div id="app-id-input-container" ng-form="appIdInput"> 
    <div class="input-group"> 
     <input id="app-id-input" name="appIdInput" ng-click="clearAppIdInput()" class="form-control" type="text" ng-model="appId" pattern="^[AaIi][PpXxNn][0-9]{6}$" maxlength="8" /> 
     <span class="input-group-btn"> 
      <button id="addAppId" class="btn btn-success" ng-click="preferences.appIdInput.$valid && addAppId()" type="button">&nbsp;<span class="glyphicon glyphicon-plus"></span></button> 
     </span> 
    </div> 
    <span class="validation-alert" ng-show="appIdError">{{appIdError}}</span> 
</div> 

当用户在输入框内单击时清除该字段。

$scope.clearAppIdInput = function() { 
    $scope.appId = ""; 
}; 

即使范围为空,该按钮未被禁用。

这是我如何禁用按钮。

$(document).ready(function(){ 
    $('#addAppId').prop('disabled',true); 

    $('#app-id-input').keyup(function(){ 
     $('#addAppId').prop('disabled', this.value == "" ? true : false); 
    }); 
}); 

现在,我可以通过点击键盘上的“backspace”来再次禁用按钮吗?

仅当我使用单击清除输入字段时,如何禁用该按钮?

回答

5

继角度来说,我会建议使用ngDisabled指令:

<button ng-disabled="!appId" id="addAppId" class="btn btn-success" 
     ng-click="preferences.appIdInput.$valid && addAppId()" 
     type="button">&nbsp;<span class="glyphicon glyphicon-plus"></span> 
</button> 

但如果$scope.appId是空的或不确定的按钮将被禁用。这不需要jQuery或任何特殊的处理程序。

+0

你能请解释与plunker例如你的答案。提前致谢 :-) –

1

该字段仅在您按下某个键时检查是否禁用。

你应该调用清除输入后禁止使用:

$scope.clearAppIdInput = function() { 
    $scope.appId = ""; 
    $('#addAppId').prop('disabled', true); 
}; 

但是从dhilt答案是更加棱角分明的风格,看起来更加清晰。当$scope.appId为空,未定义或为空

0
<button id="addAppId" class="btn btn-success" ng-click="preferences.appIdInput.$valid && addAppId()" type="button">&nbsp;<span class="glyphicon glyphicon-plus" ng-disabled="!appId"></span></button> 

ng-disabled="!appId"将禁用按钮。

简单的片断例如:

<!DOCTYPE html> 
 
<html> 
 
<head> 
 
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.4/angular.min.js"></script> 
 
<script> 
 
    var app = angular.module('myApp', []); 
 
    app.controller('myCtrl', function($scope) { 
 
     $scope.appId = ""; 
 
     
 
     $scope.clearAppId = function(){ 
 
      $scope.appId = ""; 
 
     } 
 
    }); 
 
</script> 
 
</head> 
 
<body> 
 
<div ng-app="myApp" ng-controller="myCtrl"> 
 
    <button class="btn btn-default" ng-disabled="!appId">Disable This</button> 
 
    <input type="text" ng-click="clearAppId()" ng-model="appId"/> 
 
</div> 
 
</body> 
 
</html>