सवाल jQuery वैल () और चेकबॉक्स


क्या इसके लिए कुछ तर्क है val() चेकबॉक्स नियंत्रण के लिए बेकार है, जबकि यह हर दूसरे इनपुट नियंत्रण में लगातार इनपुट डेटा प्राप्त करने के लिए उपयोगी है?

जैसे चेकबॉक्स के लिए, प्रतीत होता है चेकबॉक्स स्थिति के बावजूद हमेशा "चालू" पर वापस आएं। अन्य इनपुट नियंत्रणों के लिए जिनके पास वास्तव में "मान" विशेषता नहीं है, उदा। चयन करें और textarea, यह व्यवहार करता है जैसा आप उम्मीद करेंगे। देख:

http://jsfiddle.net/jamietre/sdF2h/4/

मैं एक अच्छे कारण के बारे में नहीं सोच सकता कि यह वापस क्यों नहीं आएगा true या false। उसमें विफल होने पर, कम से कम "चालू" पर लौटते समय चेक किया जाता है, और जब खाली स्ट्रिंग नहीं होती है। यह विफल होने पर, कम से कम हमेशा खाली स्ट्रिंग लौटाएं, बशर्ते कि चेकबॉक्स में कोई नहीं है value विशेषता!

स्पष्ट रूप से मुझे पता है कि मूल्य का उपयोग कैसे करें attr, लेकिन यहां स्थिति है। मैं सर्वर पर एचटीएमएल पार्सिंग करने के लिए एक सरल (अब तक वैसे भी) सी # jQuery कार्यान्वयन विकसित कर रहा हूं, और मैं jQuery के कार्यान्वयन के लिए पूरी तरह से वफादार होने की कोशिश कर रहा हूं, इसलिए यह एक ही डोम के खिलाफ क्लाइंट या सर्वर पर लगातार व्यवहार करता है। लेकिन यह सिर्फ बेवकूफ लगता है और मुझे चेकबॉक्स के लिए "चालू" करने के लिए वास्तव में कोड "मूल्य" कोड करने में कठिनाई हो रही है, इससे कोई फर्क नहीं पड़ता। लेकिन अगर मैं नहीं करता, तो यह संगत नहीं होगा। तो मैं समझने की कोशिश कर रहा हूं, क्या ऐसा करने का कोई कारण है? क्या यह कुछ उद्देश्य प्रदान करता है, या यह किसी तरह का आर्टिफैक्ट है? क्या कोई कभी भी इसका इस्तेमाल करेगा val() एक चेकबॉक्स के खिलाफ विधि, यदि हां, तो क्यों? यदि नहीं, तो jQuery आर्किटेक्ट्स ने इस दृष्टिकोण पर निर्णय क्यों नहीं लिया है?


51
2018-04-11 12:34


मूल


आपको अपने विकल्प टैग को बंद करना चाहिए - mcgrailm
यह सबसे विचित्र है, लेकिन यह जावास्क्रिप्ट है। बस attr ('चेक') के साथ जाएं और दुख की बात है कि आपको लगातार नहीं होना चाहिए। : | - ohmusama


जवाब:


मैं एक अच्छे कारण के बारे में क्यों नहीं सोच सकता   सच या गलत नहीं होगा। असफलता   कि, कम से कम "केवल" वापस लौटें   चेक किया गया, और एक खाली स्ट्रिंग जब नहीं।   उसमें विफल होना, कम से कम हमेशा वापस आना   चेकबॉक्स को देखते हुए एक खाली स्ट्रिंग   कोई मूल्य विशेषता नहीं है!

चेकबॉक्स में एक मूल्य विशेषता है। उदाहरण के लिए इसका उपयोग करना काफी आम है। रूपों में बहु-चेकबॉक्स, उदाहरण के लिए:

<input type="checkbox" name="foo[]" value="1" />
<input type="checkbox" name="foo[]" value="2" />

फिर जब उपयोगकर्ता फॉर्म सबमिट करता है, तो सर्वर पार्सबॉक्स के मूल्यों की जांच करके चेकबॉक्स की जांच कर सकता है foo[] सरणी। चेकबॉक्स का मूल्य नहीं बदलता चाहे वह चेक किया गया हो या नहीं; ब्राउज़र बस सर्वर पर अनचेक चेकबॉक्स के मान नहीं भेजता है। यदि आप उदाहरण करते हैं। $('#your-form').serialize()jQuery में, यह समान रूप से काम करना चाहिए; इसमें अनचेक चेकबॉक्स के मान शामिल नहीं होना चाहिए। यदि आप चेकबॉक्स से मान को छोड़ देते हैं, तो यह बस डिफ़ॉल्ट रूप से चूक जाता है on

यदि आप यह जांचना चाहते हैं कि jQuery में कोई व्यक्तिगत चेकबॉक्स चेक किया गया है या नहीं, तो सबसे अच्छा वर्णनात्मक तरीका करना है $(this).is(':checked')


64
2018-04-11 12:42



ठीक है। यह समझ आता है। Jees। मैंने एएसपीनेट की वजह से एचटीएमएल से इतने लंबे समय तक खुद को सारणित किया है कि मैं मूलभूत बातों को भूल गया कि चेकबॉक्स कैसे काम करते हैं। - Jamie Treworgy
आप जितना जानते हैं उतना जानते हैं, मुझे अभी भी लगता है कि एक और सहज ज्ञान सत्य दृष्टिकोण या गलत वापस करना होगा। आप हमेशा उपयोग कर सकते हैं attr('value') यदि तुम वही चाहते हो तो। अमूर्तता के उद्देश्य को हराने के लिए लगता है। - Jamie Treworgy
@jamietre यह अबास्ट्रक्शन का अपना दृष्टिकोण है ... यदि वैल () टेक्स्ट इनपुट के मूल्य और चेकबॉक्स इनपुट की चेक की गई स्थिति को वापस कर रहा था, तो शायद मैं रोना और jQuery का उपयोग करना बंद कर दूंगा :-) - Capsule
क्यूं कर? यदि "वैल" का उद्देश्य केवल "मूल्य" विशेषता की सामग्री को वापस करने के लिए है, तो यह व्यर्थ होगा। ऐसा नहीं है कि यह क्या करता है। यह एक पाठ क्षेत्र के आंतरिक HTML, एक का चयनित विकल्प देता है selectसूची, और ... चेकबॉक्स की "मान" विशेषता। हर दूसरे प्रकार के नियंत्रण में, यह वर्तमान फॉर्म स्थिति से संबंधित जानकारी देता है। दस्तावेज़ वैल का वर्णन इस प्रकार करते हैं: "मिलान किए गए तत्वों के सेट में पहले तत्व का वर्तमान मान प्राप्त करें।" और फिर स्पष्टीकरण पर जाएं .. "चेकबॉक्स को छोड़कर, जहां आप उपयोग कर सकते हैं: चेक किया गया।" यह पूरी तरह से counterintuitive है। - Jamie Treworgy
+1, हालांकि this.checked तुलनात्मक रूप से बहुत अच्छा है (और संभवतः परिमाण के आदेश) $(this).is(':checked')। - lonesomeday


आप कहते हैं कि "चेकबॉक्स में नहीं है value विशेषता "। इसके विपरीत: value विशेषता वैकल्पिक है के सिवाय चेकबॉक्स और रेडियो बक्से पर।

से डब्ल्यू 3 सी विनिर्देशों:

[ value विशेषता] वैकल्पिक है जब टाइप विशेषता में मान "रेडियो" या "चेकबॉक्स" होता है

on यह डिफ़ॉल्ट मान है कि जब आप विनिर्देश को अनदेखा करते हैं और सेट नहीं करते हैं तो आपका ब्राउज़र तत्व देता है valueविशेषता।

आपको याद रखना होगा कि मूल्य का क्या अर्थ है: इसे भेजा जाता है name फ़ॉर्म जमा होने पर सर्वर के तत्व के लिए। यदि यह चेक नहीं किया गया है, तो मूल्य नहीं भेजा जाता है। महत्व on इसलिए चेकबॉक्स चेक होने पर ही भेजा जाता है।


9
2018-04-11 12:45



+1 हम हर रोज कुछ नया सीखते हैं। धन्यवाद lonesomeday। यह मजाकिया है .. मैं वेब सालों में काम कर रहा हूं लेकिन चेकबॉक्स के लिए डब्ल्यू 3 सी स्पेक को कभी नहीं पढ़ा, या "ऑन" कहां से आया, इसकी जांच करने में कोई दिलचस्पी है, हालांकि यह मेरे दिमाग को अजीब मौका पार कर गया है। (कई अन्य डब्ल्यू 3 सी चश्मा के माध्यम से किया गया था ..) अब मुझे पता है। समझ में आता है! और अब पूरी तरह से अलग कुछ करने के लिए - Tom Pace


शायद यह मदद करनी चाहिए

$(document).ready(function() {
    $('input[type=checkbox]').click(function() {
      alert("val="+$(this).val()+",checked="+$(this).attr('checked'));
    });

});

उपयोग input[type=checkbox] चयन करना input type="checkbox" चूंकि चेकबॉक्स है और टाइप = "चेकबॉक्स" के साथ इनपुट

और चेकबॉक्स में मूल्य विशेषता भी डाल दें।

पर jsfiddle

अद्यतन करें

<form method="post" action="#">
    PHP<input type="checkbox" name="ch[]" value="PHP"><br/>
    JS<input type="checkbox" name="ch[]" value="JS"><br/>
    JAVA<input type="checkbox" name="ch[]" value="JAVA"><br/>
    PYTHON<input type="checkbox" name="ch[]" value="PYTHON"><br/>
    <input type="submit" name="submit"/>
</form>

और PHP

if($_POST){
foreach($_POST['ch'] as $post => $value){
    echo "$post -> $value <br/>";
}
}

वे सभी समान नाम साझा करते हैं क्योंकि वे बटन का एक आम समूह हैं। आप जानते हैं कि किसकी जांच की गई थी और जो उनके मूल्यों के माध्यम से नहीं था।

दूसरा तरीका है

if($_POST){
    foreach($_POST as $post => $value){
        echo "$post -> $value <br/>";
    }
}

<form method="post" action="#">
    PHP<input type="checkbox" name="PHP"><br/>
    JS<input type="checkbox" name="JS"><br/>
    JAVA<input type="checkbox" name="JAVA"><br/>
    PYTHON<input type="checkbox" name="PYTHON"><br/>
    <input type="submit" name="submit"/>
</form>

लेकिन पिछला लगता है कि अधिक गतिशील और कम थकाऊ (मुझे विश्वास होगा)।

और @ कैप्सूल के सवाल के रूप में

alert("val="+$(this).val()+",checked="+$(this).attr('checked'));
<input type="checkbox"> Check me.

मूल्य देता है on मुझे विश्वास है कि चेक-बॉक्स का डिफ़ॉल्ट मान है।

और दूसरा प्रयोग भी देता है on मूल्य।

मुझे आशा है कि मैं गलत नहीं हूं।


5
2018-04-11 12:37



मैंने बेवकूफ के गलत संस्करण को जोड़ा, क्षमा करें, यह तय कर दिया गया है। यह वही करता है जो मैं करता हूं। - Jamie Treworgy
ठीक है, निश्चित रूप से, आप एक चेकबॉक्स में "मान" विशेषता जोड़ सकते हैं और यह उसे वापस कर देगा। यह उपयोगी या सहज क्यों है, क्योंकि यह इनपुट नियंत्रण है? चेकबॉक्स का वास्तविक डेटा जो बदलता है, चेकबॉक्स की स्थिति है। यदि आप टेक्स्टरेरा में "मान" विशेषता जोड़ते हैं, उदाहरण के लिए, val() अभी भी textarea की सामग्री लौटाता है, जो तार्किक है। व्यवहार असंगत है। - Jamie Treworgy
@jamietre अन्य उत्तरों देखें, वे अन्य उपयोगों के बहुत सारे हैं जहां एक चेकबॉक्स का मूल्य होना चाहिए - Capsule
@jamietre द value का textarea वह टेक्स्ट है जो इसे लपेटता है, जबकि चेकबॉक्स का मान इसकी विशेषता में निहित है। - Santosh Linkha
-1 क्योंकि यह व्याख्या नहीं करता है कि चेकबॉक्स में मूल्य क्यों उपयोगी होते हैं और क्यों चेक () को चेक या नहीं के आधार पर सत्य या गलत वापस नहीं करना चाहिए। - Capsule


यदि आप वैल फ़ंक्शन में सरणी पास करते हैं, तो चेकबॉक्स का मान सरणी में मान से मेल खाता है, तो चेकबॉक्स को चेक के रूप में सेट कर देगा। स्रोत: http://api.jquery.com/val/#val-value

<input id="checkbox" type="checkbox" value="remember">    

$("#checkbox").val(["remember"]);

3
2017-08-18 09:22



मैं @ जैमी ट्रूवरी के समान महसूस करता हूं: सत्य या गलत के डिफ़ॉल्ट मानों ने असीम रूप से अधिक समझदारी की होगी। - Suncat2000


एक चेकबॉक्स हमेशा अकेला नहीं होता है और फॉर्म जमा करते समय उसका मान पारित होता है (अन्यथा, नाम / मान बिल्कुल पास नहीं होता है)।

चेकबॉक्स से सरणी बनाते समय यह बहुत उपयोगी होता है, आप इसका उपयोग कर सकते हैं name="test[]" उनके नाम के रूप में, और प्रत्येक में अलग-अलग मूल्य निर्धारित करते हैं। सबमिट किए गए परिणाम को पार्स करते समय, आप सभी चेक किए गए मान वाले सरणी के साथ समाप्त होते हैं


1
2018-04-11 12:43





चेकबॉक्स में टेक्स्ट बॉक्स की तरह वैल्यू है और यह मान सर्वर पर भेजा जा रहा है जब फ़ॉर्म सबमिट किया जाता है केवल जमा करने के समय चेकबॉक्स का चयन किया गया था।

टेक्स्ट बॉक्स के विपरीत, चेकबॉक्स में है चूक  मूल्य जो है on - यह चेकबॉक्स चयनित होने पर सर्वर पर भेजा जाता है लेकिन नहीं value अपने स्वयं के, ताकि प्रसंस्करण कोड पता चले कि यह चुना गया था।

ऐसा .val() विधि तत्व के मूल्य को वापस करने, बस ठीक काम कर रहा है।

आप सही हैं कि jQuery को यह देखने के लिए सरल तरीका याद आ रहा है कि कोई विशिष्ट चेकबॉक्स / रेडियो बटन चुना गया है, जैसे कुछ $("#mycheckbox").checked() लेकिन यही वह है जिसके लिए हमारे पास प्लगइन हैं। :)


1
2018-04-11 12:44