2011-01-09 16 views
6

क्या होवर फ़ंक्शन को केवल एक बार निष्पादित करने का कोई तरीका है? यही वह है जो मैं वर्तमान में कोशिश कर रहा हूं:jQuery - होवर के साथ .one() का उपयोग

$('#ask').live('hover', function() { 

    $('#homesearch-after').hide(300); 

    $.doTimeout(300, function() { 
     hideClosedSearchLink(); 
     showHomeSearch(); 
    }); 

}); 

लेकिन यह काम नहीं कर रहा है। मैं केवल एक बार सक्रिय करने के लिए इस होवर कैसे प्राप्त कर सकता हूं?

मैंने बदलने की कोशिश की है .one और .bind के साथ लाइव ... जिसके परिणामस्वरूप शून्यता नहीं है।

+2

असंबंधित अपने प्रश्न का, लेकिन आप एक के रूप में इसे सीधे अंदर कोड जोड़कर टाइमआउट से छुटकारा पा सकते 'छुपाएं 'खत्म होने के बाद कॉलबैक:' $ (' # homesearch-after ')। छुपाएं (300, फ़ंक्शन() {/ ** कोड यहां ** /}); ' –

उत्तर

10

आपने पहले से ही उत्तर दिया है, .one() (.live() नहीं) का उपयोग करें।

लेकिन जैसे lasseespeholt सिर्फ एक टिप्पणी में कहा, .hover()mouseenter और mouseleave के लिए बाध्य के लिए आशुलिपि है, और अपने आप में एक घटना नहीं है।

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

$('#ask').one('mouseenter', function() { 

    $('#homesearch-after').hide(300); 

    $.doTimeout(300, function() { 
     hideClosedSearchLink(); 
     showHomeSearch(); 
    }); 

}); 

हैं कि अभी भी काम नहीं करता, सिर्फ अच्छे ol का उपयोग कर '.hover() और फिर .unbind() इसे तुरंत ing के बाद वह पूरा प्रयास करें।

$('#ask').hover(function() { 

    $('#homesearch-after').hide(300); 

    $.doTimeout(300, function() { 
     hideClosedSearchLink(); 
     showHomeSearch(); 
    }); 

    // Again taking into account what lasseespeholt said 
    $(this).unbind('mouseenter mouseleave') 

}); 
+1

किसी कारण से जब मैं इस कोड का उपयोग करता हूं, तो कुछ नहीं करता। =/ – Jared

+0

@ जेरेड: क्या आपका '# ask' जेएस द्वारा आपके पृष्ठ पर गतिशील रूप से जोड़ा जा रहा है? – BoltClock

+0

नहीं, यह स्थिर HTML के साथ प्रदर्शित होता है। – Jared

8

hover कोई वास्तविक event लेकिन एक आशुलिपि विधि है कि दो घटनाओं, mouseenter और mouseleave के लिए संचालकों बांधता नहीं है, और (जैसा दिखाया है here) जैसे .one साथ काम नहीं करता। कि यह केवल एक बार आग अपवाद के साथ,

$("#foo").one("mouseenter mouseleave", function(e){ 
    $(this).toggleClass("bar"); 
}); 

ऊपर निम्नलिखित के रूप में ही होगा: hover के व्यवहार को दोहराने के लिए आपके पास दो बांध है कि दोनों केवल एक बार ट्रिगर किया जाएगा, इस तरह के लिए होगा :

$("#foo").one("mouseenter", function(e){ 
    $(this).addClass("bar").text("Over"); 
}).one("mouseleave", function(e){ 
    $(this).removeClass("bar").text("Out"); 
}); 

डब्ल्यू:

$("#foo").hover(function(){ 
    $(this).toggleClass("bar"); 
}); 

आप mouseenter और mouseleave पर अलग अलग बातें करना चाहते हैं, तो आप अलग संचालकों बाध्य करने की जरूरत है टोपी मैं अपने कोड से पढ़ सकते हैं कि आप केवल mouseenter घटना बाध्य करने के लिए, इस तरह देख रहे है:

$('#ask').one('mouseenter', function() { 
    $('#homesearch-after').hide(300); 
    $.doTimeout(300, function() { 
     hideClosedSearchLink(); 
     showHomeSearch(); 
    }); 
}); 
+1

वैकल्पिक रूप से, '.one (' माउसेंटर माउसलेव ', फ़ंक्शन (ई) {...) ' – BoltClock

+0

@ बोल्टक्लॉक, यदि आप मेरे उदाहरण में' टॉगल 'प्रकार की तरह दिख रहे हैं तो यह बेहतर होगा। मैं इसे जोड़ूंगा! – mekwall

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