我正在尝试使用输入字段和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
答案 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
要求。如果用户无法手动将任何内容放入该字段中,并且该字段中必须存在某些内容才能使其有效,我认为您基本上可以得到您想要的内容。