2010-11-03 9 views
20

मुझे रेडियो बटन के समूह के लिए एक हैंडलर पंजीकृत करने की आवश्यकता है। मैं JQuery का उपयोग कर रहा हूं और आशा करता हूं कि इसकी .change विधि इसे पूरा करेगी। हालांकि मुझे वांछित व्यवहार का अनुभव नहीं हुआ है।JQuery का उपयोग कर रेडियोग्रुप के चयनित मान में परिवर्तनों को मैं कैसे सुनूं?

यहां एक नमूना स्निपेट है जो मैंने लिखा है। अफसोस की बात है, "रेडियोवेल्यू चेंज" केवल प्रारंभिक भार पर ही बुलाया जाता है। या तो सही/गलत चुनना हैंडलर को ट्रिगर नहीं करता है।

<html> 
<script src="jquery-1.4.2.min.js" type="text/javascript"></script> 

<form id="myForm"> 
    <div id="Question1Wrapper"> 
     <div> 
      <input type="radio" name="controlQuestion" id="valueFalse" value="0" /> 
      <label for="valueFalse"> 
       False</label> 
     </div> 
     <div> 
      <input type="radio" name="controlQuestion" id="valueTrue" value="1" /> 
      <label for="valueTrue"> 
       True</label> 
     </div> 
    </div> 
    <div id="Question2Wrapper"> 
     <div> 
      <label for="optionalTextBox"> 
       This is only visible when the above is true</label> 
      <input type="text" name="optionalTextBox" id="optionalTextBox" value="" /> 
     </div> 
    </div> 

    <script type="text/javascript"> 
     jQuery(document).ready(function() 
     { 
      $("#controlQuestion").change(radioValueChanged('controlQuestion')); 
     }) 

     function radioValueChanged(radioName) 
     { 
      radioValue = $('input[name=' + radioName + ']:checked', '#myForm').val(); 

      alert(radioValue); 

      if(radioValue == 'undefined' || radioValue == "0") 
      { 
       $('#Question2Wrapper:visible').hide(); 
      } 
      else 
      { 
       $('#Question2Wrapper:visible').show(); 
      } 
     } 
    </script> 
</form> 

उत्तर

33

यहां कुछ समस्याएं हैं।

  1. आप तुरंत स्क्रिप्ट निष्पादन पर radioValueChanged('controlQuestion') चल रहे हैं क्योंकि है कि एक विधि कॉल और नहीं एक समारोह काम है।

  2. चयनकर्ता $("#controlQuestion") गलत है, आपके पास controlQuestion की आईडी के साथ कोई तत्व नहीं है।

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

    jQuery(document).ready(function() 
        { 
         $("input[name='controlQuestion']").change(radioValueChanged); 
        }) 
    
        function radioValueChanged() 
        { 
         radioValue = $(this).val(); 
    
         alert(radioValue); 
    
         if($(this).is(":checked") && radioValue == "0") 
         { 
          $('#Question2Wrapper').hide(); 
         } 
         else 
         { 
          $('#Question2Wrapper').show(); 
         } 
        } 
    

    सब ईमानदारी मुझे यकीन है कि नहीं कर रहा हूँ में, लेकिन उम्मीद है कि इस प्रदान करेगा:

आप निम्न की तरह कुछ की कोशिश कर सकते वर्तमान कोड को सही करने के लिए आपके लिए आधार।

+0

बहुत बढ़िया धन्यवाद। जैसा कि आप जावास्क्रिप्ट/jquery बता सकते हैं काफी नया/जंगली है। तो '#' हमेशा एक आईडी को उपसर्ग करता है नाम नहीं ... जानने के लिए अच्छा :) वास्तव में "$ (यह) .is (": चेक किया गया) क्या करता है? मुझे लगता है कि मैं इसके विपरीत चाहता हूं। जैसा कि यदि कोई मूल्य नहीं चुना गया है, तो मैं प्रश्न छिपाना चाहता हूं। – Justin

+1

@ जस्टिन हां चयनकर्ता वास्तव में सीएसएस चयनकर्ता नियमों का पालन करते हैं, आप सीएसएस चयनकर्ताओं के लिए w3 खोज सकते हैं .. पदानुक्रम, नाम, आईडी इत्यादि। 'is' एक jQuery फ़ंक्शन है: http : //docs.jquery.com/Is (हालांकि मुझे यह api.jquery.com पर नहीं मिला जो मुझे चिंतित करता है) –

+0

'है()' निश्चित रूप से * एपी सबडोमेन पर है: [api.jquery.com /is/](http://api.jquery.com/is/) –

0
$('#Question2Wrapper:visible').show(); 

बाहर ले : दिखाई, यह केवल यह चयन करेंगे अगर div पहले से ही दिख रहा है, प्रभाव में यह अगर यह छिपा हुआ है कभी नहीं दिखाई जाएगी।

$('#Question2Wrapper').show(); 

मुझे पता है, मुझे लगता है कि क्विंटिन अधिकांश बिंदुओं को हिट करता है। यहां कुछ मुद्दे चल रहे हैं।

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