2011-01-03 10 views
22

मैं का पता लगाने के लिए चाहते हैं पर अधिकतम क्लिक जब कोई उपयोगकर्ता किसी इनपुट प्रकार पाठ के बाहर फील्ड क्लिक करता है, में नहींjQuery -। का पता लगा रहा एक उपयोगकर्ता एक इनपुट प्रकार वाले टेक्स्ट फ़ील्ड

यहाँ मैं क्या है, लेकिन दोनों घटनाओं पर फायरिंग कर रहे हैं अंदर क्लिक करें (फोकस):

<input id="title" val="hello" /> 

$("#title").focusout(function() { 
    console.log('inside'); 
}).blur(function() { 
    console.log('outside'); 
}); 
+3

'ब्लर' आपको जो चाहिए वह पर्याप्त है। सवाल वास्तव में क्या है? –

+1

क्या आप निश्चित हैं? जब वे मैदान छोड़ते हैं तो वे दोनों मेरे लिए आग लगाते हैं। [उदाहरण] (http://jsfiddle.net/j3XWM/) – user113716

+0

कृपया अपने प्रश्न को स्पष्ट करें। जो हो रहा है उसका आपका विवरण उन घटनाओं के लिए क्या होना चाहिए इसके विपरीत है। क्या आप वास्तव में इनपुट के अंदर * क्लिक करते समय 'फोकसआउट' और 'ब्लर' आग कह रहे हैं? – user113716

उत्तर

10

आप

(function($){ 
    $.fn.outside = function(ename, cb){ 
     return this.each(function(){ 
      var $this = $(this), 
       self = this; 

      $(document).bind(ename, function tempo(e){ 
       if(e.target !== self && !$.contains(self, e.target)){ 
        cb.apply(self, [e]); 
        if(!self.parentNode) $(document.body).unbind(ename, tempo); 
       } 
      }); 
     }); 
    }; 
}(jQuery)); 

की तरह, एक छोटे से प्लगइन लिखने ..और इस्तेमाल कर सकते हैं इसे पसंद:

$('#title').outside('click', function(e) { 
    console.log('outside'); 
}); 

उदाहरण: http://www.jsfiddle.net/tGnun/

+0

बहुत चालाक। शायद आप समझा सकते हैं कि आंतरिक कार्य क्या करता है? –

+0

मुझे यह पसंद है, हमेशा प्लगइन लिखना सीखना चाहते हैं – doniyor

2

यह focusout() और blur() की तरह लग रही है दोनों ट्रिगर कर रहे हैं जब आप पाठ के बाहर क्लिक करें। इसके बजाय focus() का उपयोग करने का प्रयास करें। इसे here देखें।

+0

ओपी फोकस नहीं चाहता है। वह इनपुट छोड़ने पर कोड को आग लगाना चाहता है। – user113716

+0

@ पैट्रिक, हाँ, लेकिन वह कह रहे थे कि वे दोनों इनपुट में प्रवेश करने पर आग लगाते हैं। मेरे लिए वे दोनों छोड़ते समय निकाल दिए गए (जैसा आपने बताया) तो मैंने माना कि शायद वह थोड़ा मिश्रित हो गया था। मेरे जेएसफिडल में एक चेतावनी है कि ट्रिगर्स इन और आउट हो रहा है, इसलिए मुझे लगा कि यह पोस्टिंग के लायक था। –

0

मैं 100% यकीन है कि नहीं कर रहा हूँ:

<input id="title" val="hello" type="text" /> 

$("#title").focus(function() { 
    console.log('in'); 
}).blur(function() { 
    console.log('out'); 
}); 

focusout आवश्यक है, क्योंकि यह बच्चे तत्वों के लिए बुदबुदाती घटना की ओर तैयार है नहीं है यह वही है जो आप चाहते हैं, लेकिन यहां पर एक स्टैब है:

<html> 
<head> 
<title>Example</title> 
<script src="jquery-1.4.3.js" type="text/javascript"></script> 
</head> 
<body id="body"> 
<script> 
    $("document").ready(function() 
    { $("#body").click(function() 
     { alert("body"); }); 
     $("#input").click(function(event) 
     { alert("input"); event.stopPropagation(); }); 
    }); 
</script> 
<h2>input below</h2> 
<input id="input" type="text"/> 
</body> 
</html>
संबंधित मुद्दे