jquery
  • checkbox
  • input
  • jquery-selectors
  • 2009-04-14 16 views 32 likes 
    32

    मान लीजिए मैं निम्न HTML है:jQuery: चयन जाँच चेकबॉक्स

    <form id="myform"> 
        <input type='checkbox' name='foo[]'/> Check 1<br/> 
        <input type='checkbox' name='foo[]' checked='true'/> Check 2<br/> 
        <input type='checkbox' name='foo[]'/> Check 3<br/> 
    </form> 
    

    अब, मैं कैसे नाम 'foo []' के साथ की जाँच इनपुट फ़ील्ड का चयन करते हैं?

    यह मेरी कोशिश है, लेकिन यह काम नहीं करता है:

    $('#myform input[name='foo']:checked:enabled'); 
    
    +0

    UMN, क्या तुम वहाँ काम करता है ठीक है, बस अपने चयनकर्ता को दोहरे उद्धरण चिह्नों का उपयोग करें। :) – cgp

    +1

    हां; जागरूक रहें मेरा प्रारंभिक उत्तर ऐसा करने का सबसे अच्छा तरीका नहीं है। jQuery को चयनकर्ता में ब्रैकेट के साथ समस्याएं होती थीं लेकिन यह तय कर दिया गया है, इसलिए आपको अपने पास रखने में सक्षम होना चाहिए, केवल चयनकर्ता के चारों ओर डबल कोट्स का उपयोग करें। –

    उत्तर

    45

    फ़ील्ड का नाम foo नहीं है, यह foo[] है। आदर्श रूप में

    $("input[name^='foo']:checked:enabled",'#myform'); 
    

    , यदि आप ऐसा करने में सक्षम हो जाएगा:: आप attributeStartsWith का भी उपयोग कर सकता है

    $("input[name='foo[]']:checked:enabled",'#myform'); 
    

    लेकिन जैसे this answer बताते हैं, jQuery इस का उपयोग करता है attr=value हालत के value भाग पार्स करने के लिए:

    (['"]*)(.*?)\3|)\s*\] 
    

    \ 3 उद्घाटन युक्त समूह जा रहा है उद्धरण, जो अजीब तरह से कई उद्घाटन उद्धरण, या कोई उद्घाटन उद्धरण होने की अनुमति नहीं है। * *? फिर उद्धरण समेत किसी भी चरित्र को पार्स कर सकते हैं जब तक कि यह पहले ']' चरित्र को हिट न करे, मैच समाप्त कर दें। बैकस्लैश-एस्केपिंग सीएसएस विशेष पात्रों के लिए कोई प्रावधान नहीं है, इसलिए आप jQuery में मनमानी स्ट्रिंग मान से मेल नहीं खा सकते हैं।

    दूसरे शब्दों में, जैसे ही jQuery पहले ] पर जाता है, यह सोचता है कि मान खत्म हो गया है। तो आप शुरुआत के साथ अटक गए हैं या शुद्ध डोम तत्वों का उपयोग करते हुए, जैसा कि उत्तर भी बताता है।

    सुपर duper महत्वपूर्ण संपादित:
    इस बग तय हो गई है, जाहिरा तौर पर। आप ऊपर दिए गए कोड को "आदर्श" के रूप में वर्णित कोड का उपयोग करने में सक्षम होना चाहिए।

    +0

    मेरा मानना ​​है कि यह बग है और यह संबंधित फिक्स है: http://dev.jquery.com/ticket/3443 – cgp

    +0

    यह jQuery 1.3.2 में तय नहीं है, जो कि नवीनतम आम तौर पर उपलब्ध संस्करण प्रतीत होता है। – bobince

    +0

    यह मेरे 1.3.2 में तय किया गया है .... –

    0

    मेरा मानना ​​है कि यह कुछ इस तरह चला जाता है:

    $("input #foo[] :checked"); 
    

    संपादित करें: टिप्पणीकार सही है। मुझे अपनी पहली प्रतिक्रिया के साथ जाना चाहिए था। :) इस बार मैं "^" का उपयोग करने जा रहा हूं।

    $("input[name^=foo] :checked"); 
    
    +0

    हालांकि, [] खराब हो सकता है :) – Tacoman667

    +0

    #xyz 'id' विशेषताओं के लिए है, न कि 'नाम'। – bobince

    4

    आप चयन करते विशेषता बोली चाहिए और [] में शामिल हैं:

    $("#myform input[name='foo[]']:checked:enabled"); 
    
    +1

    यह दुर्भाग्य से काम नहीं करेगा। JQuery पार्सर पहले पर समाप्त होता है] यह मुठभेड़ करता है, इसलिए इस मामले में [] की अनुमति नहीं है। वास्तव में –

    +1

    । यह एक बग है; चर्चा के लिए http://stackoverflow.com/questions/739695 देखें। – bobince

    +0

    एक पुरानी बग। यह तय किया गया है कि यदि आप नवीनतम संस्करण का उपयोग कर रहे हैं, तो आप मेरे उदाहरण शो देख सकते हैं। – cgp

    1

    असल में, तुम क्या काम करता है ठीक है, बस दोहरे उद्धरण चिह्नों का उपयोग करें, और इसलिए यह मिलान कर सकते हैं कोष्ठक शामिल हैं।

    $("#myform input[name='foo[]']:checked:enabled"); 
    

    आप कार्रवाई यहाँ में देख सकते हैं: http://jsbin.com/oyoro

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

    देखें: http://dev.jquery.com/ticket/3443

    +0

    * mumble * * mumble * * mumble * अगर मैं गलत हूं, तो मैं recant होगा, लेकिन उदाहरण वहाँ है। – cgp

    +0

    टॉचे, दयालु महोदय। -1 हटा दिया, +1। मैंने इस नए ज्ञान के साथ अपना जवाब अपडेट कर लिया है। –

    +0

    भ्रम के लिए खेद है, मैं कुछ दिनों पहले क्या जवाब में बोबिन ने कहा था, इसलिए मुझे लगा कि यह एक वर्तमान बात थी। अगली बार खुद के लिए जांच लेंगे। –

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