2011-06-08 23 views
6

मेरे पास एक वेबपृष्ठ है जिसमें टेक्स्टबॉक्स है।किसी सरणी में सभी मानों को जांचें

जब उपयोगकर्ता इसमें जानकारी दर्ज करता है, तो यह एजेक्स कॉल को यह देखने के लिए बनाता है कि प्रविष्टि मान्य है, अगर यह बटन को अक्षम नहीं करता है।

वे jQuery टेम्पलेट्स के माध्यम से किए गए 10 टेक्स्टबॉक्स भी जोड़ सकते हैं। फिलहाल प्रत्येक टेक्स्टबॉक्स में सीरियल का एक वर्ग होता है और जब एक सीरियल टेक्स्टबॉक्स धुंधला होता है तो यह जांच करता है।

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

ऐसा करने का एकमात्र तरीका यह है कि मैं प्रत्येक टेक्स्टबॉक्स के लिए एक सरणी में 1 या 0 जोड़ना चाहता हूं और एक बार सरणी में सभी तत्व 1 हैं, फिर बटन सक्षम करें। क्या यह एक अच्छा दृष्टिकोण है, अगर नहीं, तो कृपया एक बेहतर व्याख्या करें। यदि यह एक अच्छा तरीका है, तो मैं जावास्क्रिप्ट सरणी में सभी मानों को कैसे देखूं?

धन्यवाद

+0

क्या आप स्पष्ट कर सकते हैं कि 'सीरियल टेक्स्टबॉक्स ** ** धुंधला **' कहां से आपका मतलब है? –

+0

@Charles जब उस टेक्स्टबॉक्स पर धुंधला ईवेंट निकाल दिया जाता है ... –

+0

हाँ ऐसा करें, मुझे लगता है कि प्रत्येक टेक्स्टबॉक्स की स्थिति की जांच करने के लिए 0 सेट सेट करना ठीक होगा और आपको यह पता लगाने के लिए जावास्क्रिप्ट सरणी लूप करना होगा 0 या 1 –

उत्तर

2

मैं तुम्हें समझेंगे एक isValid(str) समारोह है कि एक बूलियन देता है।

आप jQuery का उपयोग कर रहे हैं, इसलिए आपको लाभ jQuery के filter() समारोह के आसानी से जाँच करने के लिए जब भी एक इनपुट blurs यदि कोई आदानों अमान्य हैं ले जा सकते हैं:

$('.serial').live('blur', function() { 

    // Get an array of all invalid inputs 
    var invalids = $('.serial').filter(function() { 
     return !isValid($(this).val()); 
    }); 

    // Does the array contain anything? 
    $('#button').prop('disabled', invalids.length); 

}); 

डेमो: http://jsfiddle.net/3RNV6/


इसी तरह की अवधारणा, लेकिन AJAX के साथ उपयोग के लिए:

$('.serial').live('blur', function() { 
    var me = this; 

    $.ajax({ 
     // ajax config 
     success: function (data) { 
      if (data === 'Y') $(me).addClass('valid'); 

      // Get an array of all invalid inputs 
      var invalids = $('.serial').filter(function() { 
       return !$(this).hasClass('valid'); 
      }); 

      // Enable if none invalid 
      if (invalids.length === 0) $('#button').prop('disabled', false); 
     } 
    }); 
}); 

$('.serial').live('keypress', function() { 
    $('#button').prop('disabled', true); 
    $(this).removeClass('valid'); 
});   
+0

समस्या यह है कि मैं टेक्स्टबॉक्स क्लाइंटसाइड के मान की जांच नहीं कर रहा हूं, मुझे केवल यह पता है कि क्या यह मेरे AJAX अनुरोध से प्रतिक्रिया द्वारा मान्य है, इसलिए मेरे पास वाई या एन – Jon

+0

@ जोन है, क्षमा करें, मैंने AJAX आवश्यकता को याद किया। उस स्थिति में आपको 'चेंज' और 'removeClass (' valid ')' पर बटन को अक्षम करना होगा। जब AJAX अनुरोध लौटाता है तो इनपुट में 'addClass (' valid ') भी। एक बार ऐसा करने के बाद, फ़िल्टर फ़ंक्शन से '$ (this) .hasClass (' valid ')' वापस लौटें। –

+0

मैं टेक्स्टबॉक्स का संदर्भ कैसे प्राप्त करूं जिसने एजेक्स कॉल को सफलता विधि में addClass ("मान्य") करने के लिए बनाया है? – Jon

0

यदि आप गतिशील रूप से एन टेक्स्टबॉक्स बनाते हैं तो आपको पहले नए डीओएम तत्वों को सूचित करने के लिए jQuery के लाइव() या प्रतिनिधि() विधियों का उपयोग करना चाहिए।

दूसरा, आपका दृष्टिकोण ठीक है लेकिन सरणी के बजाय आप गलत टेक्स्ट के साथ इनपुट के परम सेट कर सकते हैं और फिर गलत टेक्स्ट वाले कोई तत्व होने पर बटन अक्षम कर सकते हैं। मुझे लगता है कि यह सभी टेक्स्टबॉक्सों के बावजूद लूपिंग से तेज़ होगा।

4

यह एक अच्छा दृष्टिकोण की तरह लगता है। आप इस सरल जावास्क्रिप्ट फ़ंक्शन का उपयोग करके जावास्क्रिप्ट सरणी में बराबर तत्वों की जांच कर सकते हैं। आप इसकी कार्यक्षमता की जांच के लिए इसे फायरबग कंसोल पर पेस्ट कर सकते हैं।

// check if all elements of my_array are equal, my_array needs to be an array 
function check_for_equal_array_elements(my_array){ 
    if (my_array.length == 1 || my_array.length == 0) { 
    return true; 
    } 
    for (i=0;i<my_array.length;i++){ 
    if (i > 0 && my_array[i] != my_array[i-1]) { 
     return false; 
    } 
    } 
    return true; 
} 

//Example: 
var my_array = []; 
my_array.push(5); 
my_array.push(5); 

// will alert "true" 
alert("all elements equal? "+check_for_equal_array_elements(my_array)); 

my_array.push(6); 
// will alert "false" 
alert("all elements equal? "+check_for_equal_array_elements(my_array)); 
+0

शुद्ध जावास्क्रिप्ट और तर्क के लिए +1। – alix

0

मैं इसे प्राप्त करने के लिए सत्यापन का उपयोग करूंगा।

http://docs.jquery.com/Plugins/Validation#Demos

आप क्लाइंट-साइड महान मान्य हैं कर सकते हैं - या तो ऊपर के लिंक में दिखाया गया है मौजूदा jQuery सत्यापन कार्यों में से एक का उपयोग करें, या अपने खुद के बारे में।

यदि आपको AJAX के माध्यम से सर्वर पक्ष को मान्य करना होगा, तो आप इसे कस्टम सत्यापन दिनचर्या में बना सकते हैं।

फिर कॉल में जो दिखाता है/छुपाता है - $ ('# formid) पर कॉल करें। वैध() - कोई सत्यापन विफल होने पर झूठी वापसी करता है।

संबंधित मुद्दे