2010-09-08 20 views
6

div मैं क्रम में इस आदेश दिया सूची में से प्रत्येक div पर क्लिक समारोह बाध्य करने के लिए JQueryप्रत्येक पर बाध्यकारी क्लिक समारोह JQuery

साथ
<ol id='selectable'> 
<li class="ui-state-default"> 
    <div id="img01" class="img"> 
     <div id="star01" class="star"> 
      <img src="../ima/star.png" height="30px"/> 
     </div> 
    </div> 
</li> 
<li class="ui-state-default"> 
    <div id="img02" class="img"> 
     <div id="star02" class="star"> 
      <img src="../ima/star.png" height="30px"/> 
     </div> 
    </div> 
</li> 
</ol> 
छिपाने/प्रत्येक imgXX div पर एक छवि दिखाने के लिए, मैं नौसिखिया बनाने की जरूरत है

JQuery

$('div').each(function(){ 
    $(this).click(function(){ 
      if($(this).find('img').is(':visible').length){ 
        $(this).find('img').fadeOut(700); 
      } 
      else{ 
        $(this).find('img').fadeIn(700); 
       } 
    }); 
}); 
+1

तो क्या तुम दु: ख दे रहा है? उम्म ... ($ (यह)। ढूँढें ('img')। (': Visual') है। लंबाई सही नहीं है, मुझे लगता है।() आपको सच झूठा देता है। इसकी लंबाई को लागू करना अजीब हो सकता है। –

+0

@ सिद्धार्ट आप सही हैं, यह 'ढूंढें (' img: visible ')' – alex

+0

ध्यान दें कि आप नेस्टेड div तत्वों पर क्लिक ईवेंट बाध्यकारी हैं, इसलिए वे दो बार आग लग सकते हैं। आप '$ (' div.img ') 'या' $ (' div.star ') 'div तत्वों के एक सेट को एकल करने के लिए। इसके अलावा,' .each (function() {$ (this) .click (...);}) 'सिर्फ' .click (...) को छोटा किया जा सकता 'के रूप में यह संग्रह के सभी तत्वों को घटना लागू होता है। – Guffa

उत्तर

5

is विधि एक बूलियन देता है। उपयोग:

if($(this).find('img').is(':visible')) 

या:

if($(this).find('img:visible').length) 
+0

महान मेरा समय –

8

इस प्रयास करें:

$('div').each(function(){ 
    $(this).click(function(){ 
      if($(this).find('img').is(':visible')){ 
        $(this).find('img').fadeOut(700); 
      } 
      else{ 
        $(this).find('img').fadeIn(700); 
       } 
    }); 
}); 
1

के विपरीत अन्य फ़िल्टरिंग और ट्रेवर्सल तरीकों, .is() एक नया jQuery वस्तु नहीं बनाता है। इसके बजाय, यह हमें बिना किसी संशोधन के jQuery ऑब्जेक्ट की सामग्री का परीक्षण करने की अनुमति देता है।

तो, आप के रूप में यह एक बूलियन मान देता है उस पर लंबाई का उपयोग नहीं कर सकते। 'लंबाई' निकालें और इसे काम करना चाहिए।

0

मुझे नहीं लगता कि यह आवश्यक नहीं है प्रत्येक की आवश्यकता है।

$('div').click(function(){ 

    var img = $(this).find('img'); 

    if($(img).is(':visible')){ 
    $(img).fadeOut(700); 
    } 

}); 
+0

बचाने के इस काम की है? – kubudi

0

divs के घोंसले के बारे में सुनिश्चित नहीं हैं, लेकिन जब से तुम को अनुरोध कर रहे हैं केवल img फीका मैं यह सोचते हैं कि .star div दिखाई और क्लिक करने योग्य है। नीचे दिया गया कार्य थोड़ा अधिक कुशल है क्योंकि मैं children का उपयोग find के बजाय कर रहा हूं जो रिकर्सिव है। चयनकर्ताओं के अलावा यह आपके लिए काम करना चाहिए।

$('div.star').click(function() { 
    function() { 
     $(this).children('img').fadeOut(700); 
    }, 
    function() { 
     $(this).children('img').fadeIn(700); 
    } 
}); 
संबंधित मुद्दे