2012-01-08 33 views
6

मैं बूलियन विशेषता here, जो कहता है कि एक बूलियन विशेषता (इस विशिष्ट उदाहरण में, loop<audio> की विशेषता) के लिए, आप जो भी मान निर्धारित करते हैं, यह मान्यता प्राप्त किया जा रहा है के बारे में कुछ पढ़ रहा था को हटाने बनाम झूठी मूल्य की स्थापना "सच" के रूप में। वास्तव में गलत साबित करने के लिए, आप इसे loop=false या जावास्क्रिप्ट के साथ ['loop']=false के रूप में सेट नहीं कर सकते हैं, लेकिन removeAttribute('loop') करके विशेषता को हटाना होगा। क्या ये सच है?एक विशेषता

मुझे पहले विश्वास था, लेकिन जहां तक ​​इसे क्रोम के साथ चेक किया गया था, ऐसा लगता है कि ['loop']=false पर सेटिंग वास्तव में इसे गलत साबित कर देगी। मुझे यकीन नहीं है कि इस तथ्य को कितना मजबूत माना जाता है जब क्रॉस-ब्राउजरली माना जाता है। क्या ब्राउज़र के बीच कोई अंतर है?

+0

मैं शब्द [falsy] पसंद करता हूं (http://en.wikipedia.org/wiki/JavaScript_syntax#Boolean) – mplungjan

+2

इसके अनुसार, मूल्य मौजूद होने पर सत्य माना जाता है और आप उस तरीके से सुरक्षित रहेंगे झूठी सेटिंग - http://www.w3.org/TR/html4/intro/sgmltut.html#h-3.3.4.2 – JohnP

उत्तर

4

बूलियन गुण यहां समझाए गए हैं:

http://www.w3.org/TR/html4/intro/sgmltut.html#h-3.3.4.2

कुछ विशेषताओं बूलियन चर की भूमिका निभाते हैं (उदाहरण के लिए चयनित विकल्प तत्व के लिए विशेषता)। किसी तत्व के प्रारंभ टैग में उनकी उपस्थिति का तात्पर्य है कि विशेषता का मान "सत्य" है। उनकी अनुपस्थिति का अर्थ "झूठा" का मान है।

बूलियन विशेषताएं कानूनी रूप से एक मान ले सकती हैं: का नाम स्वयं विशेषता (उदा।, चयनित = "चयनित")।

तो, जबकि कुछ ब्राउज़रों स्ट्रिंग "गलत" व्याख्या कर सकते हैं के रूप में यदि मान सेट नहीं किया गया था, दूसरों के लिए तय नहीं कर सकते हैं (जो सही व्यवहार है)। असल में, जहां तक ​​मुझे पता है (या सोचा), कोई गैर-खाली स्ट्रिंग आम तौर पर मान को सही/सही पर सेट करती है (भले ही स्पेक कहता है कि कानूनी मान क्या है)। मेरा मानना ​​है कि यह अनिर्धारित व्यवहार भी है, इसलिए यह ब्राउज़र में ब्राउज़र से अलग हो सकता है या अलग हो सकता है (उस पर भरोसा न करें)।

नीचे की रेखा है, सिर्फ इसलिए कि ब्राउज़र या दो spec से विचलित हो सकते हैं इसका मतलब यह नहीं है कि आप चाहिए। विशेषता को पूरी तरह से हटाने का तरीका है।

Addendum: अपनी टिप्पणियों को देखते हुए और थोड़ा करीब सवाल करते हैं, मुझे लगता है कि आप सामान्य रूप से विशेषता मानों के बारे में भ्रमित हो सकते हैं। एचटीएमएल में, attr=false और attr="false" बिल्कुल वही हैं। एचटीएमएल के किसी भी संस्करण में उद्धरणों की आवश्यकता नहीं है (जब तक मूल्य में रिक्त स्थान नहीं होते हैं तब तक अस्पष्टता को दूर करने के लिए उन्हें आवश्यकता होती है)। उदाहरण के लिए:

<input class=required> 
<!-- This is fine --> 

<input class=title required> 
<!-- this is fine too, but "required" will be parsed as an attribute --> 

<input class="title required"> 
<!-- To have two classes, we need the quotes --> 

सभी विशेषता मान (उन तत्वों पर जिनके पास हैं) को स्ट्रिंग के रूप में माना जाता है। दूसरे शब्दों में, जावास्क्रिप्ट में एचटीएमएल में एक वास्तविक बूलियन वैल्यू (या NULL वैल्यू) जैसी कोई चीज़ नहीं है।

+0

परिशिष्ट के लिए धन्यवाद, लेकिन मुझे पता है कि एचटीएमएल में, उन्हें तारों के रूप में व्याख्या किया जाता है। यही कारण है कि मैं जावास्क्रिप्ट का जिक्र कर रहा था। जावास्क्रिप्ट में, मैं 'झूठी' के आसपास उद्धरण के बिना '['loop'] = false' जैसी चीजें कर सकता हूं, और यह '[' loop '] =' false 'से अलग है। आपके उत्तर में मदद मिली। – sawa

+0

@sawa: तब परिशिष्ट के बारे में क्षमा करें। मैंने कभी भी '[' loop '] = false' जैसे जावास्क्रिप्ट में कुछ भी नहीं देखा है, शायद 'element.loop = false'। सुनिश्चित नहीं है कि आपको वह वाक्यविन्यास कहां मिला? मैं यह भी देखता हूं कि आप सीटी से हैं। तो मैं हूं। इसके बारे में भी क्षमा करें :) –

+0

मैं देखता हूं, आप सीटी में भी हैं। आपके उत्तर ने मेरी मदद की, और मुझे इसमें समस्या दिखाई नहीं दे रही है। सहायता के लिए धन्यवाद। – sawa

1

जैसा कि कोई है जो भविष्य में इस की जरूरत है:

loop=falsetrue रहता है जब तक कि पूरे loop विशेषता निकाल दिया जाता है। असल में, loop की उपस्थिति यह है कि किसी टैग को कुछ और करने की आवश्यकता होती है। आपको loop विशेषता (या कम से कम यही करना है) को हटाने के लिए jQuery की तरह कुछ उपयोग करने की आवश्यकता है। अब, यदि आप false पर एक अलग अपरिभाषित विशेषता सेट करते हैं, तो आप इसे false के रूप में पहचानने में सक्षम हैं।

0

आप स्ट्रिंग्स और असली बूलियन प्रकारों को भ्रमित कर रहे हैं। जावास्क्रिप्ट में एक बुलीयन डेटाटाइप है जिसमें सत्य और झूठे (उद्धरण के बिना) के दो संभावित मूल्य हैं। स्ट्रिंग्स में कोई टेक्स्ट हो सकता है, इसलिए क्या उनमें उद्धरण के साथ "सत्य" और "झूठा" हो सकता है। गैर-शून्य और गैर झूठी पैदावार सही करने के लिए एक गुण को सेट है, तो निम्नलिखित accour होगा: तो इसका अर्थ के बारे में

var a = true; // true 
var b = false; // false 
var c = "true"; // true 
var d = "false" // true 
var e = null; // false; 
var f = 0; // false 
var g = 1; // true 

नोट सी

+0

वह वास्तव में इसके HTML भाग का जिक्र कर रहा है और जेएस नहीं। प्रश्न ठीक से टैग नहीं किया गया है – JohnP

+0

ओह हाँ, क्षमा करें। प्रश्न को गलत समझा –

+0

अरे, यह मामला नहीं है कि मैं सावधानी से पर्याप्त नहीं पढ़ रहा था ...यह मामला है कि इसे "जावास्क्रिप्ट" टैग किया गया है! –

1

audio तत्व एक HTML5 तत्व है के साथ समानता,, आपको एचटीएमएल 5 ड्राफ्ट से परामर्श लेना चाहिए। इस मामले में, WHATWG ड्राफ्ट के डेवलपर संस्करण में definition of boolean attributes देखें। यह वास्तव में, ए) कहता है कि विशेषता की उपस्थिति या अनुपस्थिति यह निर्धारित करती है कि क्या DOM विशेषता मान true या false है, और बी) दस्तावेजों की आवश्यकता के रूप में, मान खाली होना चाहिए या (केस-असंवेदनशील) विशेषता नाम होना चाहिए , इस मामले में loop='' या loop="loop"। मूल्य के चारों ओर उद्धरण चिह्नों का उपयोग कहीं और परिभाषित किया जाता है।

इस प्रकार, ब्राउज़र loop=false पहचान करने के लिए loop=loop या loop=true रूप में एक ही मतलब के लिए आवश्यक हैं, लेकिन लेखक इस तरह के निर्माणों का उपयोग नहीं करना चाहिए, और एचटीएमएल 5 उनके बारे में इस मुद्दे को त्रुटि संदेश चेकर्स।

अगर आप अपने मूल्य के रूप में एक audio तत्व वस्तु के साथ एक चर x जावास्क्रिप्ट में है, (मूल रूप से, आप एक्सएचटीएमएल क्रमबद्धता में सिर्फ एचटीएमएल 5 का HTML क्रमबद्धता में loop और loop="loop" उपयोग करने के लिए माना जाता है।)

इस प्रकार, x.loop में मूल्य true या false है जबकि x.attributes['loop'].value HTML मार्कअप (जो आमतौर पर इस तरह के दिलचस्प नहीं है) में उपयोग किए गए मान को इंगित करता है।

फ़ायरफ़ॉक्स के संबंध में एक और जटिलता है: यह अभी भी loop विशेषता का समर्थन नहीं कर रहा है (प्रश्न HTML5 Audio Looping देखें)। इसका मतलब है कि यदि आप उदा। loop="loop", x.attributes['loop'].valueloop होगा लेकिन फ़ायरफ़ॉक्स x.loop भी सेट नहीं करता है (यानी, यह undefined है), अभी भी कार्यक्षमता को कम कार्यान्वित करता है।

+0

मेरे प्रश्न के अनुरूप विस्तृत उत्तर के लिए धन्यवाद। – sawa

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