खाली HTML5 डेटा विशेषताएँ मान्य हैं?


115

मैं एक साधारण jQuery प्लगइन लिखना चाहता हूं जो निर्दिष्ट तत्वों के तहत इनलाइन मोडल प्रदर्शित करता है। मेरा विचार तत्वों पर निर्दिष्ट डेटा विशेषताओं के आधार पर ऑटो-इनिट की स्क्रिप्ट के लिए है।

एक बहुत ही बुनियादी उदाहरण:

<p data-modal-target>Hover over me for an inline modal!</p>
<div data-modal-content data-modal-align="right" data-modal-trigger="hover" data-modal-offset="10px"><!-- any desired syntax can go here --></div>

मैं सोच रहा हूँ कि क्या data-modal-targetउपरोक्त उदाहरण मान्य है, या होना है data-modal-target="true"? मैं IE9 आदि की तुलना में कुछ क्रैपीयर की परवाह नहीं करता, मेरी एकमात्र आवश्यकता यह है कि यह मान्य HTML5 हो।


मुझे यह नहीं मिला कि कस्टम डेटा विशेषताओं के लिए मान की आवश्यकता है या नहीं; और अभी भी अनिश्चित है कि क्या मूल्य को छोड़ना है, या इसे सुरक्षित करने के लिए शामिल करें। W3C कल्पना भ्रामक है (कोई आश्चर्य नहीं)। मुझे लगता है कि यह मूल्यों का उपयोग करके स्क्रिप्ट पर निर्भर हो सकता है। (टिप्पणी उदाहरण लंबाई सीमा के कारण नीचे जारी रहा)।
गोयडे

उदाहरण के लिए, मैं एक प्लग-इन का उपयोग कर रहा हूं जिसमें डिफ़ॉल्ट मानों के साथ कस्टम डेटा विशेषताएँ हैं: कुछ तार, कुछ बूलियन (मुझे इस प्रश्न की तलाश करने के लिए अग्रणी)। बूलियन डेटा में इस बात का मिश्रण होता है कि डिफ़ॉल्ट सही है या गलत; यह देखने के लिए जाँच कर रहा है कि क्या इसका अस्तित्व है या इसका कोई मूल्य है। यह जाँच रहा है कि मान या तो सत्य है या रिक्त (सत्य के लिए), या असत्य है। लेकिन कोड में खाली के लिए चेक स्पष्ट है; यह "बिल्ट-इन" नहीं है। और, यह विशेषता नाम के लिए जाँच नहीं कर रहा है, जैसे डेटा-एबीसी = "डेटा-एबीसी" के रूप में एक बूलियन विशेषता की आवश्यकता होती है; यह एक त्रुटि का कारण बनता है।
गोयडे

जवाबों:


52

मान्य, लेकिन वे बूलियन नहीं हैं।

कस्टम डेटा विशेषताएँ विनिर्देश रिक्त विशेषताओं से निपटने के लिए किसी भी परिवर्तन का उल्लेख नहीं करते हैं, इसलिए खाली विशेषताओं के बारे में सामान्य नियम यहां लागू होते हैं:

बिना किसी मूल्य के, केवल विशेषता नाम प्रदान करके कुछ विशेषताओं को निर्दिष्ट किया जा सकता है।

निम्नलिखित उदाहरण में, disabledविशेषता खाली विशेषता सिंटैक्स के साथ दी गई है:

<input disabled>

ध्यान दें कि खाली विशेषता वाक्यविन्यास निम्नलिखित स्ट्रिंग के रूप में विशेषता के लिए मूल्य के रूप में खाली स्ट्रिंग निर्दिष्ट करने के लिए बिल्कुल समान है।

<input disabled="">

तो आपको खाली कस्टम डेटा विशेषताओं का उपयोग करने की अनुमति है, लेकिन उन्हें बूलियन के रूप में उपयोग करने के लिए विशेष हैंडलिंग की आवश्यकता होती है।

आप एक खाली विशेषता पर पहुंचते हैं, अपने मूल्य है ""। चूंकि यह एक मिथ्या मूल्य है, आप केवल if (element.dataset.myattr)यह जांचने के लिए उपयोग नहीं कर सकते कि कोई विशेषता मौजूद है या नहीं।

आपको element.hasAttribute('myattr')या if (element.dataset.myattr !== undefined)इसके बजाय उपयोग करना चाहिए ।


लॉयड का जवाब गलत है। उन्होंने बूलियन विशेषताओं के माइक्रोसिंथैक्स से लिंक का उल्लेख किया है, लेकिन data-*कल्पना में विशेषताओं को बूलियन के रूप में निर्दिष्ट नहीं किया गया है।


"ध्यान दें कि खाली विशेषता वाक्यविन्यास निम्न स्ट्रिंग को विशेषता के लिए मान के रूप में निर्दिष्ट करने के बराबर है, जैसा कि निम्नलिखित उदाहरण में है।" वास्तव में मैं क्या खोज रहा था। विशेष रूप से, jQuery की scriptAttrsसेटिंग एक सादे deferमूल्य को पसंद नहीं करती है , लेकिन एक defer: ""चाल चलनी चाहिए। धन्यवाद!
1957 में sfarbota

111

हां, पूरी तरह से मान्य है। आपके मामले में, data-modal-targetएक बूलियन विशेषता का प्रतिनिधित्व करेगा:

२.४.२ बूलियन गुण

एक तत्व पर एक बूलियन विशेषता की उपस्थिति सही मूल्य का प्रतिनिधित्व करती है, और विशेषता की अनुपस्थिति झूठे मूल्य का प्रतिनिधित्व करती है।


3
अच्छा! लिंक के लिए धन्यवाद, मैं आमतौर पर w3.org के माध्यम से उतारा करने के लिए धैर्य नहीं है :)
एडम

4
मुझे पता नहीं है कि मूल्य को छोड़ देना "इसे एक बूलियन विशेषता में बदल देता है - ऐसा लगता है कि बूलियन विशेषताएँ मनमानी नहीं हैं;" मुझे लगता है कि उनकी एक सूची है। शायद यह कोई फर्क नहीं पड़ता कि यह ब्राउज़र या स्क्रिप्ट द्वारा बूलियन या कस्टम डेटा के रूप में माना जाता है; लेकिन शायद यह इसे पढ़ने वाली स्क्रिप्ट पर निर्भर करता है।
गोयडे

3
मेरा मानना ​​है कि यह बदल गया है। निश्चित रूप से मैं अपने कोड में जिस उदाहरण का उपयोग कर रहा हूं वह बूलियन के रूप में नहीं बल्कि एक खाली स्ट्रिंग के रूप में माना जा रहा है। तो, परीक्षण if ($('p').data('modal-target'))काम नहीं करेगा: stackoverflow.com/questions/16864999/…
डेरेक हेंडरसन

4
ऐसा लगता है कि यह सच नहीं है element.dataset.modalTargetखाली स्ट्रिंग का उत्पादन होगा जो झूठा है (क्रोम 32) उसी परिणाम के साथ jQuery
H1D

20
यह युक्ति की गलत व्याख्या प्रतीत होती है। वह अनुभाग जिसे आप बूलियन विशेषताओं का वर्णन करने के लिए लिंक करते हैं, लेकिन यह नहीं कहते हैं कि क्या कस्टम डेटा विशेषताएँ बूलियन विशेषताएँ हो सकती हैं।
BoltClock

1

हाँ, यह एक कस्टम डेटा विशेषता के लिए मान को छोड़ना के लिए सिंटैक्स है।

"विशेषताएँ चार अलग-अलग तरीकों से निर्दिष्ट की जा सकती हैं:

खाली विशेषता सिंटैक्स केवल विशेषता नाम है। मान स्पष्ट रूप से खाली स्ट्रिंग है। [...] " https://developers.whatwg.org/syntax.html#attributes-0


1

एक ओर, यह सत्यापनकर्ता को 16.5.7 https://validator.w3.org/nu/#textarea पास करता है :

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="utf-8"/>
  <title>a</title>
</head>
<body data-asdf>
</body>
</html>

दूसरी ओर, HTML5 data-विशेषताओं के विनिर्देश में यह नहीं कहता है कि वे बूलियन हैं: https://www.w3.org/TR/html5/dom.html#custom-data-attribute जबकि यह कहता है कि अन्य बूलियन के लिए बहुत स्पष्ट रूप से https://www.w3.org/TR/html5/forms.html#attr-input-checked जैसी विशेषताएँchecked

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.