2012-08-02 13 views
6

हटाएं यदि मेरे पास this fiddle में दिखाए गए वर्ग उपनव हैं तो डिफ़ॉल्ट एंकर अक्षम है।event.preventDefault() पहले क्लिक पर

मैं केवल पहले क्लिक के लिए यह अक्षम करना चाहता हूं तो मैं सामान्य एंकर कार्यक्षमता वापस लाया जाना चाहता हूं। इसे करने का बेहतरीन तरीका क्या है? मैंने नीचे दिए गए कोड को शामिल करने की कोशिश की लेकिन यह काम नहीं कर रहा था?

$(this).unbind(event.preventDefault()); 

शायद इस psuedo कोड की तरह कुछ हो सकता है?

if (click count === 0) { 
    event.preventDefault(); 
} 

या इससे संपर्क करने का एक बेहतर तरीका है?

उत्तर

5

काम आप पास कर सकते हैं falseone() होगा अच्छा है एक हैंडलर पास करना जो false लौटाता है, जो घटना के प्रसार को प्रभावी रूप से रोकता है और इसके डिफ़ॉल्ट व्यवहार को रोकता है।

यह bind() के लिए दस्तावेज में समझाया गया है:

jQuery में 1.4.3 आप अब किसी ईवेंट हैंडलर के स्थान पर false में पारित कर सकते हैं। यह एक इवेंट हैंडलर के बराबर होगा: function() { return false; }

+0

यह मेरे द्वारा धन्यवाद के मुकाबले बहुत आसान है। रिकॉर्ड के लिए मैंने $ ("ul> .subnav> a") का उपयोग किया। एक ("क्लिक करें", झूठा); ताकि यह केवल उस स्तर को प्रभावित करे, न कि बच्चों को। – ak85

+0

इसे जांचें http://css-tricks.com/return-false-and-prevent-default/ सिद्धांत में यह आदर्श लगता है लेकिन जब मैंने कोशिश की तो मुझे क्लिक ईवेंट को आग लगने के लिए डबल-क्लिक करना पड़ा: -/ –

8

इवेंट हैंडलर को one()docu के साथ बाध्य करें। यह एक बार निष्पादित करता है और बाद में स्वचालित रूप से अनबाइंड करता है।

$(".subnav a").one("click", function(event) { 
    event.preventDefault(); 
}); 

वैकल्पिक रूप से आप इसे सीधे कार्य में स्वयं को अनबाइंड कर सकते हैं।

$(".subnav a").one("click", false); 

हैंडलर के बजाय false पासिंग के बराबर है: यह है कि

$(".subnav a").bind("click.myclick", function(event) { 
    event.preventDefault(); 
    $(this).unbind(".myclick"); 
}); 
+1

नेमस्पेस अवधारणा ने मुझे अच्छे विचार साझा करने के लिए धन्यवाद दिया। – Amol

0

के लिए एक नाम स्थान का उपयोग करने के लिए इस के लिए आप

$("#elementid").bind("click", function(event) { 
    alert("This will be displayed only once."); 
    event.preventDefault(); 
    $(this).unbind(event); 
}); 
0

आप क्लिक हैंडलर में स्वयं को अनबिंड के रूप में सरल कुछ भी उपयोग कर सकते हैं।

कुछ

तरह
function stopEventOnce(event) { 
    event.preventDefault(); 
    $(this).unbind('click',stopEventOnce); 
    return false; 
} 
$(".subnav a").bind('click', stopEventOnce); 

Modified fiddle

5

यह अच्छी तरह से काम करता है। दूसरा क्लिक पृष्ठ पर जाता है ...

$(".smallNavigation > ul > li > a").click(function (e) { 

    $("ul.sub-menu").hide(); 
    $("ul.sub-menu", $(this).parent("li")).show(); 

    e.preventDefault(); 
    $(this).unbind(e); 

} 
+0

इससे मेरी मदद की! विशेष रूप से। 'E.preventDefault(); $ (यह) .unbind (ई); धन्यवाद – breezy

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