2011-08-25 25 views
83

मैं जानना चाहता हूं कि jQuery में कोई सरणी खाली या शून्य है या नहीं। मैंने array.length === 0 की कोशिश की लेकिन यह काम नहीं किया। यह किसी भी त्रुटि को फेंक नहीं दिया।जांचें कि सरणी खाली है या शून्य

var album_text = new Array(); 

$("input[name='album_text[]']").each(function(){ 
    if($(this).val() && $(this).val() != '') { 
    album_text.push($(this).val()); 
    } 
}); 
if (album_text.length === 0) { 
    $('#error_message').html("Error"); 
} 

else { 
    // send data 
} 
+2

"सामान्य जावास्क्रिप्ट" जैसा ही है: http: // stackoverflow।कॉम/प्रश्न/2672380/कैसे-करें-i-check-if-a-javascript-array-value-is-blank-or-null –

+1

@ जुलिएन, मैंने इस धागे को शुरू करने से पहले उस थ्रेड में सूचीबद्ध सभी समाधानों को आजमाया। उनमें से कोई भी किसी तरह काम नहीं किया। – input

+0

क्या हम संदर्भ के लिए कुछ और कोड प्राप्त कर सकते हैं? जावास्क्रिप्ट के आसपास, एचटीएमएल? क्या आप सुनिश्चित हैं कि '$ (" इनपुट [name = 'album_text []'] ") वास्तव में तत्वों को वापस कर रहा है? –

उत्तर

123

जब तक आपका चयनकर्ता वास्तव में काम कर रहा है, मुझे आपके कोड के साथ कुछ भी गलत नहीं लगता है जो सरणी की लंबाई की जांच करता है। ऐसा करना चाहिए जो आप चाहते हैं। सरल और अधिक पठनीय होने के लिए अपने कोड को साफ करने के कई तरीके हैं। मैंने जो साफ किया है उसके बारे में नोट्स के साथ एक साफ़ संस्करण है।

var album_text = []; 

$("input[name='album_text[]']").each(function() { 
    var value = $(this).val(); 
    if (value) { 
     album_text.push(value); 
    } 
}); 
if (album_text.length === 0) { 
    $('#error_message').html("Error"); 
} 

else { 
    //send data 
} 

आप जो कर रहे थे और जो मैंने बदल दिया था, उसके बारे में कुछ नोट्स।

  1. $(this) हमेशा एक मान्य jQuery वस्तु तो वहाँ कभी if ($(this)) जाँच करने के लिए कोई कारण नहीं है है। इसमें इसके अंदर कोई भी डोम ऑब्जेक्ट नहीं हो सकता है, लेकिन यदि आपको आवश्यकता हो तो $(this).length के साथ आप इसे देख सकते हैं, लेकिन यह आवश्यक नहीं है क्योंकि .each() लूप नहीं चलाएगा यदि आपके .each() लूप के अंदर कोई आइटम नहीं था कुछ कुछ।
  2. यह एक ही फ़ंक्शन में $ (यह) कई बार उपयोग करने में अक्षम है। स्थानीय चर में इसे एक बार प्राप्त करने के लिए बहुत बेहतर है और फिर उस स्थानीय चर से इसका उपयोग करें।
  3. new Array() के बजाय [] के साथ सरणी प्रारंभ करने की अनुशंसा की जाती है।
  4. if (value) जब मान एक स्ट्रिंग दोनों की रक्षा करेगा से value == null, value == undefined और value == "" ताकि आप if (value && (value != "")) करने के लिए की जरूरत नहीं है होने की उम्मीद है। आप बस तीन खाली शर्तों की जांच के लिए: if (value) कर सकते हैं।
  5. if (album_text.length === 0) आपको बताएगा कि सरणी खाली है, जब तक कि यह मान्य, प्रारंभिक सरणी (जो यहां है)।

आप इस चयनकर्ता $("input[name='album_text[]']") के साथ क्या करने का प्रयास कर रहे हैं?

+5

@MaciekSemik - http://stackoverflow.com/questions/359494/does-it-matter-which-equals-operator-vs-i-use-in-javascript-comparisons देखें। मैं हमेशा सख्त समानता ('===') का उपयोग करता हूं जब तक कि मैं विशेष रूप से एक प्रकार के रूपांतरण की अनुमति नहीं देना चाहता। इसमें प्रवेश करने की एक अच्छी आदत है। – jfriend00

6

आप '' (रिक्त स्ट्रिंग) के लिए जाँच करनी चाहिए अपने सरणी में धकेलने से पहले:

इस कोड है। आपके सरणी में ऐसे तत्व हैं जो खाली तार हैं। फिर आपका album_text.length === 0 ठीक काम करेगा।

+0

कृपया अद्यतन कोड देखें। मैंने यह कोड 'अगर ($ (यह) .val() && $ (यह) .val()! =' '') जोड़ा है, फिर भी यह काम नहीं करता है। – input

55

उपयोगकर्ता JQuery यह जांचने के लिए EmptyObject है कि सरणी में तत्व हैं या नहीं।

var testArray=[1,2,3,4,5]; 
var testArray1=[]; 
console.log(jQuery.isEmptyObject(testArray)); //false 
console.log(jQuery.isEmptyObject(testArray1)); //true 
+1

लंबाई की जांच करने से कहीं अधिक विश्वसनीय, विशेष रूप से यदि आपका चर भी एक वस्तु हो सकता है (वस्तुओं के साथ, लंबाई खाली होने के लिए काम नहीं करती है)। – gaborous

+0

यह मेरी राय में अधिक उचित उत्तर है। – earl3s

+3

'isEmptyObject' हमेशा 'झूठा' देता है यदि' Array.prototype' बढ़ाया गया है, उदा। 'Array.prototype.someFunction = function() {}; '- भले ही सरणी खाली हो। ध्यान दें कि कुछ ढांचे (उदा। Ember.js) डिफ़ॉल्ट रूप से ऐरे प्रोटोटाइप का विस्तार करते हैं। – jesenko

6

मुझे लगता है कि यह जांच करने के लिए jQuery से $ .isEmptyObject उपयोग करने के लिए खतरनाक है कि क्या सरणी, रिक्त है @jesenko के रूप में उल्लेख किया है। मैं बस उस समस्या से मुलाकात की।

isEmptyObject doc में, यह उल्लेख है:

तर्क हमेशा एक सादे जावास्क्रिप्ट ऑब्जेक्ट

जो आप $.isPlainObject द्वारा निर्धारित कर सकते हैं होना चाहिए। $.isPlainObject([]) की वापसी झूठी है।

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