2010-07-12 12 views
6

मेरे पास दो इनपुट फ़ील्ड हैं। मैं #area पर ध्यान केंद्रित करना चाहता हूं इससे कोई फर्क नहीं पड़ता कि उपयोगकर्ता पर क्लिक करता है जब तक यह # इनपुट पर है। मैंने इस तरह कुछ करने की कोशिश की है, लेकिन चूंकि इनपुट दस्तावेज़ का हिस्सा है, यह काम नहीं करता है।अपवाद के साथ एक तत्व पर बल केंद्रित करें। (jQuery)

$("#area").focus(); 
$(document).click(function() { $("#area").focus() }; 
$("#input").click(function() { $("#input").focus() }; 

विचार?

उत्तर

10

$("#area").focus(); 
$(document).click(function() { $("#area").focus() }); 
$("#input").click(function(e) { e.stopPropagation(); $("#input").focus() }); 

करने के लिए परिवर्तन यह इस दस्तावेज़ को खलबली मचाने वाले से घटना बंद हो जाएगा, और केवल #input

+1

$ (दस्तावेज़) .click (function() {। $ ("# क्षेत्र") ध्यान केंद्रित()}; होना चाहिए $ (दस्तावेज़) .click (function() {$ ("#area")। फोकस()}); –

1

जब सामान्य पर क्लिक आप बुदबुदाती घटना रद्द करने की आवश्यकता द्वारा पकड़ा हो जाएगा इनपुट, या तो अपने ईवेंट हैंडलर में झूठी वापसी करके, या e.stopPropagation() पर कॉल करके।

मुझे यकीन नहीं है कि जिस क्रम में आप ईवेंट हैंडलर निर्दिष्ट करते हैं, लेकिन आप पहले #input ईवेंट डालने का प्रयास कर सकते हैं।

1

stopPropogation समाधान जो मैं सुझा रहा हूं उससे सरल है, लेकिन शायद यह इस अन्य विकल्प पर चर्चा करने लायक है।

$(document).click(function(event) { ... 

और अगर घटना के target संपत्ति अपने इनपुट है देखने के लिए परीक्षण: है कि पहले समारोह आप मिल गया है में, आप समारोह है, जो एक jQuery सामान्यीकृत घटना वस्तु है करने के लिए पहला तर्क लेने की कोशिश कर सकते :

$(document).click(function(event) { 
    if(! (event.target == $("#input").get(0))) 
     $("#area").focus(); 
} 
+1

+1, इसका अतिरिक्त लाभ यह है कि आपको केवल दोनों मामलों को संभालने के लिए केवल एक फ़ंक्शन की आवश्यकता है .. जोड़ा गया नकारात्मक यह है कि IE के लिए आपको 'event.srcElement' के विरुद्ध परीक्षण करने की आवश्यकता है जो जटिलता को जोड़ता है .. –

+1

सावधान रहें कि 'event' IE में एक आरक्षित कीवर्ड है, और जब आप इसे चर के रूप में उपयोग करते हैं तो त्रुटि होगी। इसके अलावा, आपके द्वारा प्रदान की गई जांच को सरल (और छोटा) लिखा जा सकता है जैसे 'if ($ (event.target) .is ('# input'))' –

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