2011-09-28 17 views
6

मैं एक .toggle() एक divएक jQuery .toggle() विधि

if (condition) { 
    $("#div").toggle(
     function() { 
      do this 
     }, 
     function() { 
      do that 
     } 
    ); 
} 
else { 

    // How do I achieve this? 
    $("#div").disableToggle(

    ); 
} 

अधिक विवरण से जुड़ी निष्क्रिय करने के लिए एक तरह से देख रहा हूँ निष्क्रिय कर दें:

यह एक नक्शा अनुप्रयोग है। प्रश्न में toggle एक छवि बटन से जुड़ा हुआ है। नक्शा ज़ूम स्तर 4 पर लोड होता है। उपयोगकर्ता ज़ूम करता है, और प्रश्न में बटन केवल तब सक्रिय हो जाता है जब उपयोगकर्ता ज़ूम स्तर 6 से अधिक ज़ूम किया जाता है। एक बार जब उपयोगकर्ता स्तर 6 से कम तक ज़ूम करता है, तो मैं टॉगल बटन चाहता हूं फिर से निष्क्रिय हो जाओ।

+0

सबसे अच्छा तरीका है 'click' कि घटनाओं को चालू कहते निकल रहा है। मैं एक उत्तर पोस्ट करूंगा, लेकिन मैं अभी समय से बाहर हूं। –

+0

आपको शायद इस मामले में टॉगल() का उपयोग नहीं करना चाहिए; टॉगल() एक आंतरिक काउंटर का उपयोग करता है और यदि आप इसे चालू और बंद करने का प्रयास करते हैं तो उसे बोर्कड होने की संभावना है। – Kato

+0

ऐसा नहीं है कि मैं 'टॉगल()' बंद करने की कोशिश कर रहा हूं। ऐसा लगता है कि मैं इसे किसी शर्त पर अक्षम करना चाहता हूं। ऐप एक निश्चित मानचित्र ज़ूम स्तर पर निर्भर है। केवल सही ज़ूम पर टॉगल सक्रिय होना चाहिए। जब उपयोगकर्ता ज़ूम रेंज से बाहर निकलता है, तो टॉगल निष्क्रिय होना चाहिए। – punkish

उत्तर

6

क्यों नहीं बस क्लिक निकल?

वर्ग टॉगल के लिए चयन किया जाता है निकालें:

$('#div').unbind('click'); 
+0

'टॉगल' कोई ईवेंट या इवेंट हैंडलर नहीं है। यह एक सुविधा फ़ंक्शन है जो वास्तव में 'क्लिक' जोड़ता है हैंडलर –

+1

तो मैंने अभी खोजा है। क्लिक ईवेंट को अनबाइंड करना हालांकि काम करता है। http://jsfiddle.net/finbarr/gePha/ – Finbarr

+0

ओपी के प्रश्न पर मेरी पहली टिप्पणी की तरह कहा गया है;) ~~ "सबसे अच्छा तरीका टॉगल जोड़ने वाले क्लिक ईवेंट को अनबिंड करना है। मैं एक उत्तर पोस्ट करूंगा, लेकिन मैं अभी समय से बाहर हूं "। जिस जवाब में मेरे पास वर्तमान में पोस्ट करने का समय नहीं है (मैं तकनीकी रूप से काम पर हूं) विशेष रूप से उस विशेष घटना हैंडलर को हटा रहा था। आपका उत्तर उन सभी को हटा देता है। कई परियोजनाओं के लिए, हालांकि इस तरह की एक कठोर विधि ठीक है, इसलिए मैंने आपका जवाब अप-वोट किया। मैं इस पर एक चेतावनी जोड़ूंगा कि यह इंगित करता है कि यह * सभी * क्लिक हैंडलर को हटा देगा। –

3

आप समारोह के अंदर condition डाल सकता है:

$("#div").toggle(
    function() { 
     if (condition) { 
      //do this 
     } 
    }, 
    function() { 
     if (condition) { 
      //do that 
     } 
    } 
); 
1

आप toggle() के लिए अनाम कार्यों गुजर नहीं कर रहे थे, तो आप इस्तेमाल कर सकते हैं तकनीक का वर्णन किया on this forum post घटनाओं निकल लिए।

+0

दुख की बात है, यह काम नहीं करता है। यह टॉगल को सक्रिय करता है, लेकिन अनबिंड नहीं होता है। – punkish

3

आप .cleanData() उपयोग कर सकते हैं:

// this will destroy all data bound to that element 
$.cleanData($("#div")); 

Demo.

+0

आपका डेमो कोड कुछ भी नहीं प्रतीत होता है। इसके अलावा, उस वाक्यविन्यास का क्या मतलब है? –

+0

@ बेन ली - अंतिम बयान पर टिप्पणी करें और divs पर क्लिक करने से फिर से काम होगा। यह 'टॉगल()' को मारता है। – karim79

+0

क्या क्लीनडाटा कहीं भी दस्तावेज है? मैं इसे गुगल कर रहा हूं, लेकिन मुझे एक ऐसा पृष्ठ नहीं मिल रहा है जो बताता है कि यह क्या करना है। –

2

यहाँ एक तरीका है। यहाँ बेला: http://jsfiddle.net/leifparker/rSP34/2/

एचटीएमएल

<div class="button_toToggle"> Toggle it! </div> 
<div class="button_disableToggle"> Disable Toggle </div> 
<div class="happyDiv togglable">&nbsp;</div> 

जे एस

$('.button_toToggle').click(function(){ 
    $('.togglable').toggle(); 
}); 
$('.button_disableToggle').click(function(){ 
    $('.happyDiv').removeClass('togglable'); 
}); 
संबंधित मुद्दे