HTML में त्रि-राज्य चेक बटन (हाँ, नहीं, अशक्त) का कोई तरीका नहीं है, है ना?
वहाँ किसी भी सरल चाल या काम के आसपास अपने आप से पूरी बात प्रस्तुत करने के लिए बिना कर रहे हैं?
HTML में त्रि-राज्य चेक बटन (हाँ, नहीं, अशक्त) का कोई तरीका नहीं है, है ना?
वहाँ किसी भी सरल चाल या काम के आसपास अपने आप से पूरी बात प्रस्तुत करने के लिए बिना कर रहे हैं?
जवाबों:
संपादित करें - जानूस ट्रॉल्सन की टिप्पणी के लिए धन्यवाद, मुझे एक बेहतर समाधान मिला:
indeterminate
W3c संदर्भ गाइड देखें । चेकबॉक्स प्रकट करने के लिए नेत्रहीन अनिश्चित इसे सच करने के लिए सेट करें:
element.indeterminate = true;
यहां जानूस ट्रॉल्सन की बेला है । हालाँकि, ध्यान दें:
indeterminate
राज्य HTML मार्कअप में सेट नहीं किया जा सकता है, यह केवल जावास्क्रिप्ट के जरिए किया जा सकता है (यह देखने JSfiddle परीक्षण और इस सीएसएस चाल में विस्तृत लेख )
यह राज्य चेकबॉक्स का मान नहीं बदलता है, यह केवल एक दृश्य क्यू है जो इनपुट की वास्तविक स्थिति को मास्क करता है।
ब्राउज़र परीक्षण: मेरे लिए क्रोम 22, फ़ायरफ़ॉक्स 15, ओपेरा 12 और वापस IE7 में काम किया। मोबाइल ब्राउज़र के बारे में, iOS 3.1 पर एंड्रॉइड 2.0 ब्राउज़र और सफारी मोबाइल के पास इसके लिए समर्थन नहीं है।
पिछला उत्तर
एक अन्य विकल्प (के रूप में जीमेल "कुछ चयनित" राज्य के लिए चेकबॉक्स पारदर्शिता के साथ खेलने के लिए होगा
हैपिछले संस्करणों में किया करते थे)। इसके लिए कुछ जावास्क्रिप्ट और एक CSS क्लास की आवश्यकता होगी। यहां मैंने एक विशेष उदाहरण रखा है जो एक सूची को चेक करने योग्य आइटम और एक चेकबॉक्स को संभालता है जो उनमें से सभी को चुनने की अनुमति देता है। यह चेकबॉक्स "कुछ चयनित" स्थिति दिखाता है जब सूची में से कुछ का चयन किया जाता है।एक आईडी के
#select_all
साथ एक चेकबॉक्स और एक क्लास के साथ कई चेकबॉक्स दिए गए.select_one
,सीएसएस वर्ग जो "सभी का चयन करें" चेकबॉक्स को फीका करता है वह निम्न होगा:
.some_selected { opacity: 0.5; filter: alpha(opacity=50); }
और JS कोड जो सभी चेकबॉक्स का त्रि-स्थिति को संभालता है वह निम्न है:
$('#select_all').change (function () { //Check/uncheck all the list's checkboxes $('.select_one').attr('checked', $(this).is(':checked')); //Remove the faded state $(this).removeClass('some_selected'); }); $('.select_one').change (function () { if ($('.select_one:checked').length == 0) $('#select_all').removeClass('some_selected').attr('checked', false); else if ($('.select_one:not(:checked)').length == 0) $('#select_all').removeClass('some_selected').attr('checked', true); else $('#select_all').addClass('some_selected').attr('checked', true); });
आप इसे यहाँ आज़मा सकते हैं: http://jsfiddle.net/98BMK/
उम्मीद है की वो मदद करदे!
.prop('checked', ...)
के बजाय का उपयोग किया जाना चाहिए .attr('checked', ...)
।
आप तत्वों पर HTML की indeterminate
IDL विशेषता का उपयोग कर सकते हैं input
।
मेरे प्रस्ताव का उपयोग किया जाएगा
उदाहरण यहां देखें:
/**
* loops thru the given 3 values for the given control
*/
function tristate(control, value1, value2, value3) {
switch (control.value.charAt(0)) {
case value1:
control.value = value2;
break;
case value2:
control.value = value3;
break;
case value3:
control.value = value1;
break;
default:
// display the current value if it's unexpected
alert(control.value);
}
}
function tristate_Marks(control) {
tristate(control,'\u2753', '\u2705', '\u274C');
}
function tristate_Circles(control) {
tristate(control,'\u25EF', '\u25CE', '\u25C9');
}
function tristate_Ballot(control) {
tristate(control,'\u2610', '\u2611', '\u2612');
}
function tristate_Check(control) {
tristate(control,'\u25A1', '\u2754', '\u2714');
}
<input type='text'
style='border: none;'
onfocus='this.blur()'
readonly='true'
size='1'
value='❓' onclick='tristate_Marks(this)' />
<input style="border: none;"
id="tristate"
type="text"
readonly="true"
size="1"
value="❓"
onclick="switch(this.form.tristate.value.charAt(0)) {
case '❓': this.form.tristate.value='✅'; break;
case '✅': this.form.tristate.value='❌'; break;
case '❌': this.form.tristate.value='❓'; break;
};" />
आप एक अनिश्चित स्थिति का उपयोग कर सकते हैं: http://css-tricks.com/indeterminate-checkboxes/ । यह बॉक्स से बाहर ब्राउज़रों द्वारा समर्थित है और किसी भी बाहरी जेएस लाइब्रेरी की आवश्यकता नहीं है।
आप उस कार्यक्षमता को प्राप्त करने के लिए रेडियो समूहों का उपयोग कर सकते हैं:
<input type="radio" name="choice" value="yes" />Yes
<input type="radio" name="choice" value="No" />No
<input type="radio" name="choice" value="null" />null
मुझे लगता है कि सबसे अर्थपूर्ण तरीका readonly
विशेषता का उपयोग कर रहा है जो चेकबॉक्स इनपुट हो सकता है। कोई सीएसएस, कोई चित्र नहीं, आदि; एक अंतर्निहित HTML संपत्ति!
फिडल देखें:
http://jsfiddle.net/chriscoyier/mGg85/2/
जैसा कि यहाँ पिछली ट्रिक में बताया गया है: http://css-tricks.com/indeterminate-checkboxes/
यहाँ उल्लेख indeterminate
विशेषता का उपयोग कर एक चल उदाहरण है :
const indeterminates = document.getElementsByClassName('indeterminate');
indeterminates['0'].indeterminate = true;
<form>
<div>
<input type="checkbox" checked="checked" />True
</div>
<div>
<input type="checkbox" />False
</div>
<div>
<input type="checkbox" class="indeterminate" />Indeterminate
</div>
</form>
बस कोड स्निपेट चलाएं यह देखने के लिए कि यह कैसा दिखता है।
@Franz जवाब की तरह आप भी इसे चुनिंदा के साथ कर सकते हैं। उदाहरण के लिए:
<select>
<option></option>
<option value="Yes">Yes</option>
<option value="No">No</option>
</select>
इसके साथ आप एक ठोस मूल्य भी दे सकते हैं जो फॉर्म के साथ भेजा जाएगा, मुझे लगता है कि चेकबॉक्स के जावास्क्रिप्ट अनिश्चितकालीन संस्करण के साथ, यह चेकबॉक्स के अंडरलाइन मूल्य को भेज देगा।
जब जावास्क्रिप्ट अक्षम होता है तो कम से कम, आप इसे कॉलबैक के रूप में उपयोग कर सकते हैं। उदाहरण के लिए, इसे एक आईडी दें और लोड ईवेंट में इसे अनिश्चित स्थिति के साथ चेकबॉक्स के जावास्क्रिप्ट संस्करण में बदल दें।
उपरोक्त सभी उल्लेखों के अलावा, jQuery प्लगइन्स भी हैं जो मदद कर सकते हैं:
व्यक्तिगत चेकबॉक्स के लिए:
पेड़ की तरह व्यवहार चेकबॉक्स के लिए:
EDIT दोनों पुस्तकालय ' अनिश्चित ' चेकबॉक्स विशेषता का उपयोग करते हैं , क्योंकि Html5 में यह विशेषता सिर्फ स्टाइलिंग के लिए है ( https://www.w3.org/TR/2011/WD-html5-20110113/number-state.html#clbox-state ), शून्य मान कभी सर्वर पर नहीं भेजा जाता है (चेकबॉक्स में केवल दो मान हो सकते हैं)।
इस मान को सर्वर में जमा करने में सक्षम होने के लिए, मैंने छिपे हुए प्रतिपक्ष फ़ील्ड बनाए हैं, जो कुछ जावास्क्रिप्ट का उपयोग करके फ़ॉर्म सबमिशन पर पॉपुलेट किए जाते हैं। सर्वर की ओर, आपको मूल चेकबॉक्स के बजाय उन समकक्ष फ़ील्ड्स को जांचना होगा।
मैंने पहली लाइब्रेरी (स्टैंडअलोन चेकबॉक्स) का उपयोग किया है जहां यह महत्वपूर्ण है:
उम्मीद है की वो मदद करदे।
यहाँ सरल jQuery और संपत्ति के साथ अन्य उदाहरण data-checked
:
$("#checkbox")
.click(function(e) {
var el = $(this);
switch (el.data('checked')) {
// unchecked, going indeterminate
case 0:
el.data('checked', 1);
el.prop('indeterminate', true);
break;
// indeterminate, going checked
case 1:
el.data('checked', 2);
el.prop('indeterminate', false);
el.prop('checked', true);
break;
// checked, going unchecked
default:
el.data('checked', 0);
el.prop('indeterminate', false);
el.prop('checked', false);
}
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<label><input type="checkbox" name="checkbox" value="" checked id="checkbox"> Tri-State Checkbox </label>
@BoltClock उत्तर का संदर्भ लेते हुए , यहां एक अधिक जटिल पुनरावर्ती विधि के लिए मेरा समाधान है:
http://jsfiddle.net/gx7so2tq/2/
यह सबसे सुंदर समाधान नहीं हो सकता है, लेकिन यह मेरे लिए ठीक काम करता है और काफी लचीला है।
मैं कंटेनर को परिभाषित करने वाली दो डेटा ऑब्जेक्ट का उपयोग करता हूं:
data-select-all="chapter1"
और तत्व स्वयं:
data-select-some="chapter1"
दोनों का मूल्य समान है। एक चेकबॉक्स के भीतर दोनों डेटा-ऑब्जेक्ट का संयोजन sublevels की अनुमति देता है, जो पुनरावर्ती स्कैन किए जाते हैं। इसलिए परिवर्तन को रोकने के लिए दो "सहायक" कार्यों की आवश्यकता होती है।
आपको इसे नकली करने के लिए जावास्क्रिप्ट / सीएसएस का उपयोग करना होगा।
एक उदाहरण के लिए यहाँ प्रयास करें: http://www.dynamicdrive.com/forums/archive/index.php/t-26322.html
HTML फॉर्म एलिमेंट्स को डिसेबल करना संभव है - क्या ऐसा नहीं होगा? आपके उपयोगकर्ता इसे तीन राज्यों में से एक में देखेंगे, अर्थात जाँच, अनियंत्रित और अक्षम, जिसे बाहर निकाला जाएगा और क्लिक करने योग्य नहीं होगा। मेरे लिए, यह "शून्य" या "लागू नहीं" के समान लगता है या जो भी आप उस तीसरे राज्य में देख रहे हैं।
Https://github.com/supernifty/tristate-checkbox पर एक साधारण जावास्क्रिप्ट त्रि-राज्य इनपुट फ़ील्ड कार्यान्वयन है
चेकबॉक्स प्लगइन के साथ jQuery प्लगइन "jstree" यह कर सकता है।
http://www.jstree.com/documentation/checkbox
-मैट