2013-03-08 7 views
151

मैं इस तरह मेरे रूप है:अक्षम सबमिट बटन जब प्रपत्र AngularJS साथ अवैध

<form name="myForm"> 
    <input name="myText" type="text" ng-model="mytext" required /> 
    <button disabled="{{ myForm.$invalid }}">Save</button> 
</form> 

जैसा कि आप देख सकते हैं, बटन अक्षम है यदि इनपुट रिक्त है, लेकिन यह करने के लिए वापस नहीं बदलता है सक्षम जब यह पाठ है मैं इसे कैसे कारगर बना सकता हूं? Here's a demo on Plunker

<form name="myForm"> 
    <input name="myText" type="text" ng-model="mytext" required /> 
    <button ng-disabled="myForm.$invalid">Save</button> 
</form> 
+0

http://www.angulartutorial.net/2016/04/disable-submit-button-until-all.html – Prashobh

उत्तर

306

आप अपने फार्म के नाम के साथ-साथ एनजी-विकलांग उपयोग करने के लिए की जरूरत है। मैं बस पता चला कि यह भी अगर आप अपने प्रपत्र का नाम (कोणीय 1.3) में एक हाइफ़न का उपयोग टूट जाएगा:

तो यह होगा नहीं काम:

<form name="my-form"> 
    <input name="myText" type="text" ng-model="mytext" required /> 
    <button ng-disabled="my-form.$invalid">Save</button> 
</form> 
+0

क्षमा करें, अब मैं इसका उपयोग करता हूं। फिर भी, यह तब भी अक्षम है जब टेक्स्टबॉक्स में टेक्स्ट – ali

+0

हाँ है, मुझे कुछ याद आया। मैंने इसे अपडेट किया है। –

+0

धन्यवाद। यह – ali

30

इस उत्तर को जोड़ने के लिए:

+2

हां, किसी भी कोणीयजेएस फॉर्म सत्यापन के लिए फॉर्म नाम ऊंट मामले में होना चाहिए।अंगूठे के नियम के रूप में – dubilla

+6

, अभिव्यक्तियों की तरह सभी जेएस कैमेलकेस फॉर्म में ऑब्जेक्ट्स को पहचानेंगे, जबकि डैश एचटीएमएल के लिए सिंटैक्स – ecoologic

+0

जैसे एचटीएमएल के लिए है, तो यदि फॉर्म एक फॉर्मेट का सदस्य है तो क्या होता है, और इसलिए नाम होना आवश्यक है/इसमें एक हाइफ़न (जैसे "my_formset_name-0")? – trubliphone

23

चयनित प्रतिक्रिया, सही है, लेकिन किसी मेरे जैसे, सर्वर-साइड-बटन को अनुरोध भेजने के साथ एसिंक सत्यापन के साथ समस्याएं हो सकती हैं, दिए गए अनुरोध प्रसंस्करण के दौरान अक्षम नहीं किया जाएगा, इसलिए बटन झपकी देगा, जो उपयोगकर्ताओं के लिए बहुत अजीब लग रहा है।

इस शून्य करने के लिए आपको सिर्फ $ फार्म के लंबित स्थिति को संभालने के लिए की जरूरत है:

<form name="myForm"> 
    <input name="myText" type="text" ng-model="mytext" required /> 
    <button ng-disabled="myForm.$invalid || myForm.$pending">Save</button> 
</form> 
+0

एसिंक सत्यापन समाधान के लिए बहुत बहुत धन्यवाद! –

1

हम एक सरल निर्देश जब तक सभी अनिवार्य क्षेत्रों भर रहे हैं बना सकते हैं और बटन निष्क्रिय कर सकते हैं।

angular.module('sampleapp').directive('disableBtn', 
function() { 
return { 
    restrict : 'A', 
    link : function(scope, element, attrs) { 
    var $el = $(element); 
    var submitBtn = $el.find('button[type="submit"]'); 
    var _name = attrs.name; 
    scope.$watch(_name + '.$valid', function(val) { 
    if (val) { 
    submitBtn.removeAttr('disabled'); 
    } else { 
    submitBtn.attr('disabled', 'disabled'); 
    } 
    }); 
    } 
}; 
} 
); 

For More Info click here

+0

समाधान की आपकी विधि मेरे लिए थोड़ा चिमटा के साथ काम करती है। धन्यवाद – Tatipaka

+0

जब आप कोणीय 1.x और '[अक्षम]' में कोणीय निर्देश 'ng-disabled' होते हैं तो कोणीय 2 | 4.x में मूल निर्देश' ng-disabled' होते हैं, जो इस से बेहतर परीक्षण किए जाते हैं? दूसरा, एक निर्देश है जो एक नेस्टेड बटन को अक्षम करने के लिए किसी रूप में स्कॉप्ड किया गया है, यह सुपर विशिष्ट है। एक बीमार विचार समाधान आईएमओ। –

+0

ऊपर एक नमूना निर्देश है, मूल में नेस्टेड चेक बॉक्स इत्यादि जैसे कई परिदृश्य हैं और मैं हर फॉर्म में जोड़कर अपना एचटीएमएल कोड गड़बड़ नहीं करना चाहता, बल्कि यह निर्देश सभी चीजों का ख्याल रखेगा। – Prashobh

0

<form name="myForm"> 
 
     <input name="myText" type="text" ng-model="mytext" required/> 
 
     <button ng-disabled="myForm.$pristine|| myForm.$invalid">Save</button> 
 
</form>

क्या आप रिएक्टिव प्रपत्र उपयोग कर रहे हैं तो आप इस का उपयोग कर सकते में थोड़ा और अधिक सख्त

1

होना चाहते हैं:

<button [disabled]="!contactForm.valid" type="submit" class="btn btn-lg btn primary" (click)="printSomething()">Submit</button> 
संबंधित मुद्दे