2013-08-15 16 views
13

Cho sẵn dạng html đơn giản như thế này:AngularJS - Mẫu Tuỳ chỉnh Validation - Kiểm tra nếu ít nhất một đầu vào là trống

<form name="myForm" action="#sent" method="post" ng-app> 
    <input name="userPreference1" type="text" ng-model="shipment.userPreference" /> 
    <input name="userPreference1" type="text" ng-model="shipment.userPreference" /> 
    <input name="userPreference1" type="text" ng-model="shipment.userPreference" /> 
... submit input and all the other code... 
</form> 

tôi cần sự giúp đỡ của bạn để biết làm thế nào để kiểm tra đúng thời hạn xác nhận, nếu ít nhất một trong các đầu vào trống. Xác nhận mong muốn là như sau. Người dùng phải hoàn thành ít nhất một tùy chọn.

Sử dụng jQuery này:

if ($("input").val() == "") { 

trình ok, nhưng muốn tìm ra cách để làm điều tương tự sử dụng góc.

Cảm ơn rất nhiều trước,

Guillermo

Trả lời

29

Vì vậy, ý tưởng là để vô hiệu hóa nút gửi nếu tất cả các yếu tố đầu vào trống. Bạn có thể làm như thế này

<form name="myForm" action="#sent" method="post" ng-app> 
    <input name="userPreference1" type="text" ng-model="shipment.userPreference1" /> 
    <input name="userPreference1" type="text" ng-model="shipment.userPreference2" /> 
    <input name="userPreference1" type="text" ng-model="shipment.userPreference3" /> 

    <button type="submit" ng-disabled="!(!!shipment.userPreference1 || !!shipment.userPreference2 || !!shipment.userPreference3)">Submit</button> 
</form> 

!!str là để buộc để chuyển đổi str đến một giá trị boolean. Và cả hai !!null!!"" được đánh giá là false.

Demo

+0

sza, cảm ơn câu trả lời của bạn! Người dùng sẽ không được yêu cầu nhập tất cả các trường, chỉ một, do đó tôi cần kiểm tra khi xác thực nếu ít nhất một đầu vào đã được điền. – Guillermo

+0

@Guillermo Sau đó, họ nên có mô hình khác nhau. – zsong

+0

Vì vậy, điều đó có nghĩa rằng tôi cần một mô hình cho mỗi đầu vào, và sau đó trong thời gian xác nhận kiểm tra tất cả chúng? Nếu tôi có 50 đầu vào, sẽ là một mớ hỗn độn ... cảm ơn rất nhiều cho câu trả lời của bạn. Tôi đã làm theo đề xuất của bạn một cách chính xác? AngularJS đang bắt đầu làm tôi thất vọng – Guillermo

3

Bạn có thể thiết lập các "yêu cầu" trong các yếu tố đầu vào và phong cách/code như thế nào bạn muốn xử lý với $ giá trị của một biểu mẫu. Kiểm tra http://dailyjs.com/2013/06/06/angularjs-7/

+0

Mouli, cảm ơn câu trả lời của bạn, tôi biết nó lạ, nhưng trong trạng thái ban đầu, người dùng sẽ thấy ba đầu vào, và sẽ được yêu cầu điền ít nhất một, nhưng không phải tất cả chúng. Vì vậy, đó là lý do tại sao tôi nghĩ rằng việc thêm yêu cầu sẽ không phù hợp với tôi. Tôi cần một số tương đương với $ ("đầu vào"). Val() == "" áp dụng cho angularjs. Cảm ơn!! – Guillermo

4

Giải pháp của tôi đã được như sau:

 $scope.requiredInputsGroup = function() { 
      var isRequired = true; 
      if (!$scope.shipment) { 
       return true; 
      } 
      angular.forEach(["userPreference1", "userPreference2", "userPreference3"], function (input) { 
       if ($scope.shipment[input]) { 
        isRequired = false; 
        return false; 
       } 
      }); 

      return isRequired; 
     }; 

Bạn áp dụng phương pháp đó để một data-ng-required ở mỗi đầu vào ...

<form name="myForm" action="#sent" method="post" ng-app> 
    <input name="userPreference1" type="text" ng-model="shipment.userPreference1" ng-required="requiredInputsGroup()" /> 
    <input name="userPreference2" type="text" ng-model="shipment.userPreference2" ng-required="requiredInputsGroup()" /> 
    <input name="userPreference3" type="text" ng-model="shipment.userPreference3" ng-required="requiredInputsGroup()" /> 

    <button type="submit" ng-disabled="myForm.$invalid">Submit</button> 
</form> 

Và các bit cuối cùng tôi áp dụng là làm cho nút bị vô hiệu hóa với một đơn giản myForm.$invalid

+1

Giải pháp tuyệt vời! Tôi thay đổi nó để bạn có thể vượt qua trong mô hình bạn đang thử nghiệm thay vì đi qua một mảng vào forEach. Vấn đề duy nhất đã được thử nghiệm đối với các hộp kiểm mà trả về một 'N' khi không được kiểm tra, nhưng điều đó thực sự dễ dàng để kiểm tra trong if. Cảm ơn! – Yeysides