2013-08-21 5 views
13

समस्या यह थी कि मुझे "onClickOut" -Event की आवश्यकता है।onClickOut (तत्व छोड़ने के बाद क्लिक करें)

उदाहरण के लिए: आपके पास कुछ बटन या कभी भी होवरिंग (ऑनसाउस ओवर) पर एक डीआईवी देखने है।

यदि आप तत्व के बाहर क्लिक करते हैं तो इसे छिपाने की जरूरत है, लेकिन यदि आप $ ("body") कहते हैं। पर क्लिक करें, जब आप तत्व में स्वयं क्लिक करते हैं तो यह भी छिपा होगा। :/

अब मैं माउसपोजिशन सुनता हूं और माउसलेव() मैंने अपने तत्व में क्लिक करने पर एक var सेट किया है। अगले चरण में मैं एक जीनरल क्लिक-इवेंट (बॉडी) सुनता हूं लेकिन मैं पूछता हूं कि var सेट किया गया था या नहीं। यदि नहीं, तो यह मेरे तत्व के बाहर एक क्लिक होना है, इसलिए मैं अपना तत्व छुपा सकता हूं।

मुझे आशा है कि आप इसका इस्तेमाल कर सकते हैं:

$("#schnellsuche_box").mouseleave(function() { 
    var inside; 
    $("#schnellsuche_box").click(function() { 
     inside = true; 
    }); 
    $("body").click(function() { 
     if(!inside) { 
      $("#schnellsuche_box").hide(); 
     } 
    }); 
    delete inside; 
}); 
+0

नोट: आप स्थानीय चर को 'हटा नहीं सकते'। (लेकिन यदि आप कर सकते हैं, तो यह समझ में नहीं आएगा क्योंकि आपके क्लिक हैंडलर उस चर का उपयोग करने का प्रयास करते हैं।) – nnnnnn

उत्तर

3

आप करना है कि दस्तावेज़ के स्तर पर एक क्लिक करने के लिए सुन रहा है, और ईवेंट हैंडलर के अंदर आप की जाँच करता है, तो क्लिक किए गए तत्व #schnellsuche_box या closest() का उपयोग कर, तो तरह से #schnellsuche_box अंदर किसी भी तत्व था द्वारा:

$(document).on('click', function(e) { 
    if (! $(e.target).closest('#schnellsuche_box').length) 
     $('#schnellsuche_box').hide(); 
}); 

FIDDLE

1

आप body क्लिक करें घटना के लिए खलबली मचाने वाले से #schnellsuche_box क्लिक करें घटना को रोकने के लिए की जरूरत है (कि डिफ़ॉल्ट घटना प्रचार है) return false करके:

$("#schnellsuche_box").click(function() { 
    inside = true; 

    return false; 
}); 
+1

'event.stopPropogation(); 'भी काम करेगा, मुझे बताया गया है कि' वापसी झूठी 'केवल बुलबुले बंद हो जाती है जब jquery callbacks – rps

+0

@rps हाँ में उपयोग किया जाता है जो काम करेगा, लेकिन यह jQuery के लिए विशिष्ट नहीं है, यह केवल जावास्क्रिप्ट में भी काम करता है। – mattytommo

+1

मुझे यकीन नहीं है कि "यह" आपकी टिप्पणी में क्या संदर्भ दे रहा है * "यह केवल जावास्क्रिप्ट में भी काम करता है" *, लेकिन यदि यह 'झूठी वापसी' है, तो यह केवल डिफ़ॉल्ट घटना को "गैर-jQuery" में रोक देगा "घटना हैंडलर, घटना प्रसार नहीं। –

0

इसे आज़माएं:

$("body").click(function(e) { 
    var $target = $(e.target); 
    if (!$target.is('#schnellsuche_box') && 
     !$target.parents('#schnellsuche_box').length) { 
     alert('outside'); 
    } 
}); 
0
$("#schnellsuche_box").on("click",function(event) { 
    event.preventDefault(); 
    event.stopPropagation(); 
}); 
+0

@ F4r-20 आपको नहीं है, 'ईवेंट' वर्तमान जावास्क्रिप्ट ईवेंट को संदर्भित करता है। – mattytommo

+0

मुझे नहीं पता था, धन्यवाद। – George

+0

@mattytommo - कम से कम ऐसा करता है यदि आप IE और क्रोम के कुछ संस्करणों का उपयोग कर रहे हैं। इसे पैरामीटर के रूप में परिभाषित किया जाना चाहिए। – adeneo

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