Angular指令使得必需字段只读

时间:2015-11-13 11:18:41

标签: angularjs input angularjs-directive required

我正在尝试使用输入字段和readonly。

html标准不允许这样做,所以我尝试为它制作自己的指令,但永远不会发生keydown/keypress绑定。有没有解决方法,以及为什么这不起作用?

ngApp.directive('required', function() {
    return {
        require: '?input',
        restrict: 'A',
        link: function($scope,$element,$attr) {
                 if ($attr.hasOwnProperty('readonly')) {
                      $element.removeAttr('readonly');
                      $element.bind('keydown keypress', function(e){
                            e.preventDefault();
                      });
                 }
         }
    };
});

plnkr.co/edit/XhTxPpqnKwSFKJflSHZW?p=preview ....第二个文本字段,必不可由系统验证!

欢呼声

c_bb

1 个答案:

答案 0 :(得分:0)

编辑:我只是重新阅读你的问题并再次考虑它,我的原始答案是垃圾。你真的希望你的表单上有novalidate,然后你会以角度类型的方式显示错误而不是尝试使用html表单验证,因为你提到的原因不适合你。评价。

您希望表单看起来像这样:

    <form name="testForm" ng-submit="submitForm(testForm.$valid)" novalidate >
    <input type="text" name="value" ng-model="test1" required><br>
    <input type="text" name="value2" ng-model="test2" required readonly><br>
    <p ng-show="testForm.value2.$error.required" class="help-block">Please select a whatever</p>

    <input type="submit" ng-click='testForm.$valid && mySubmitFunction()'>

</form>

这将根据required的库存角度验证给您一条错误消息。

你需要在控制器中使用某种提交处理程序,如下所示:

 $scope.submitForm = function(isValid) {

// check to make sure the form is completely valid
if (isValid) {
  alert('our form is amazing');
} else {
  console.log('fail')
}

};

在提交功能中执行您需要的任何明智的事情。

// OLD,可怕的答案

如果readonly属性确实覆盖了所需的属性,那么正确的属性就是&#39;解决方案可能会编写一些自定义验证(请参阅http://ng-learn.org/2014/02/Writing_Custom_Validitions/上的文章)。

但是,如果您只是想要一个廉价的出路,您可以对输入提出ng-minlength=1要求。如果用户无法手动将任何内容放入该字段中,并且该字段中必须存在某些内容才能使其有效,我认为您基本上可以得到您想要的内容。