2008-12-10 23 views
29

का उपयोग करके फोकस किया है, आप कैसे पता लगाते हैं कि किस फ़ॉर्म इनपुट ने जावास्क्रिप्ट या jQuery का उपयोग करके फोकस किया है?पता लगाएं कि किस फ़ॉर्म इनपुट ने जावास्क्रिप्ट या jQuery

एक फ़ंक्शन के भीतर से मैं यह निर्धारित करने में सक्षम होना चाहता हूं कि किस फ़ॉर्म इनपुट पर ध्यान केंद्रित किया गया है। मैं इसे सीधे जावास्क्रिप्ट और/या jQuery में करने में सक्षम होना चाहता हूं।

उत्तर

15

मुझे यकीन है कि अगर यह सबसे कारगर तरीका है नहीं कर रहा हूँ, लेकिन आप की कोशिश कर सकते:

var selectedInput = null; 
$(function() { 
    $('input, textarea, select').focus(function() { 
     selectedInput = this; 
    }).blur(function(){ 
     selectedInput = null; 
    }); 
}); 
+15

बड़े डीओएम संरचनाओं के लिए बहुत ही अनुपयोगी, तत्वों को गतिशील रूप से जोड़ने का समर्थन नहीं करता है, लिंक के बारे में क्या? आश्चर्यचकित यह सही उत्तर –

+2

@ जुआन मेंडिस के रूप में चुना गया था: हर स्थिति के लिए बोर्ड समाधान में सब कुछ नहीं होना चाहिए। मान लीजिए या नहीं, अधिकांश समय आपके पास <10 इनपुट और कोई गतिशील रूप से जोड़े गए फ़ील्ड नहीं होंगे और यह ठीक काम करेगा। –

+6

अधिकांश समय, 10 से कम इनपुट और गतिशील रूप से उन्हें नहीं जोड़ रहे हैं? शायद जटिल रूपों के लिए, जटिल वेब ऐप्स के लिए नहीं। यदि दस्तावेज़ .activeElement सभी ग्रेड ए ब्राउज़र में उपलब्ध है, तो आप अधिक जटिल और तकनीकी रूप से निम्न समाधान का उपयोग क्यों करेंगे? इसके अलावा, अगर फोकस एक लिंक पर जाता है, तो यह आपको झूठी सकारात्मक देगा। मैं बस ओपी चेतावनी दे रहा हूँ। –

3

यदि आप फोकस करते समय किसी विशेष फॉर्म फ़ील्ड के लिए सीएसएस को बदलना चाहते हैं, तो आप सीएसएस "फोकस" चयनकर्ता का उपयोग कर सकते हैं। आईई 6 के साथ संगतता के लिए जो इसका समर्थन नहीं करता है, आप IE7 लाइब्रेरी का उपयोग कर सकते हैं।

+5

'$ ('# some_id_here इनपुट [टाइप = टेक्स्ट]: फोकस') टेक्स्ट इनपुट के लिए काम करेगा। –

+0

यह मेरे लिए बिल्कुल काम नहीं करता है - क्या कोई नया "फोकस" चयनकर्ता है? –

+0

मैं एक सीएसएस चयनकर्ता के बारे में बात कर रहा हूं, एक jQuery चयनकर्ता नहीं। –

58

document.activeElement, यह एक लंबे समय और एफएफ के नवीनतम संस्करण और क्रोम समर्थन यह भी के लिए IE में समर्थित किया गया है । अगर कुछ भी ध्यान केंद्रित नहीं करता है, तो यह document.body ऑब्जेक्ट देता है।

+0

वाह! बहुत बढ़िया भाई –

0

अन्यथा

window.getSelection().getRangeAt(0).startContainer 
1

का प्रयास करें, आप onFocus और onBlur घटनाओं इस्तेमाल कर सकते हैं।

कुछ की तरह:

<input type="text" onfocus="txtfocus=1" onblur="txtfocus=0" /> 

और फिर अपने जावास्क्रिप्ट

if (txtfocus==1) 
{ 
//Whatever code you want to run 
} 

if (txtfocus==0) 
{ 
//Something else here 
} 

में कुछ इस तरह की है लेकिन वह सिर्फ यह कर के अपने तरीका होगा, और यह अगर आप अत्यंत व्यावहारिक नहीं हो सकता है है, 10 इनपुट कहें :)

1

मैं इसे इस तरह से करूँगा: मैंने एक ऐसा फ़ंक्शन इस्तेमाल किया जो 1 को वापस कर देगा यदि उसे भेजा गया तत्व की आईडी वह थी जो मेरी घटना को ट्रिगर करेगी, और अन्य सभी एक 0 में हो जाएंगे और "अगर" बयान तो बस होता गिरावट के माध्यम से और नहीं कुछ भी:

function getSender(field) { 
    switch (field.id) { 
     case "someID": 
     case "someOtherID": 
      return 1; 
     break; 
     default: 
      return 0; 
    } 
} 

function doSomething(elem) { 
    if (getSender(elem) == 1) { 
     // do your stuff 
    } 
    /* else { 
     // do something else 
    } */ 
} 

एचटीएमएल मार्कअप:

<input id="someID" onfocus="doSomething(this)" /> 
<input id="someOtherID" onfocus="doSomething(this)" /> 
<input id="someOtherGodForsakenID" onfocus="doSomething(this)" /> 

पहले दो DoSomething में घटना क्या करेंगे, आखिरी वाला नहीं होगा (या अगर खंडित हो तो अन्य खंड करेगा)।

टॉम

1

यहाँ पाठ/पासवर्ड/पाठ क्षेत्र के लिए एक समाधान (यकीन नहीं करता है, तो मैं दूसरों कि फोकस प्राप्त कर सकते हैं भूल गया है, लेकिन वे आसानी से संशोधित खंड अगर ... एक सुधार किया जा सकता है के द्वारा जोड़ा जा सकता है उपयुक्त इनपुट को निर्धारित करने के लिए आईएफ के शरीर को अपने स्वयं के फ़ंक्शन में डालने से डिज़ाइन पर)।

मान लीजिए कि आप उस ब्राउज़र पर खेल रहे उपयोगकर्ता पर भरोसा कर सकते हैं जो पूर्व-ऐतिहासिक नहीं है (http: //www.caniuse।com/# करतब = डाटासेट):

 <script> 
     //The selector to get the text/password/textarea input that has focus is: jQuery('[data-selected=true]') 
     jQuery(document).ready(function() { 
      jQuery('body').bind({'focusin': function(Event){ 
       var Target = jQuery(Event.target); 
       if(Target.is(':text')||Target.is(':password')||Target.is('textarea')) 
       { 
        Target.attr('data-selected', 'true'); 
       } 
      }, 'focusout': function(Event){ 
       var Target = jQuery(Event.target); 
       if(Target.is(':text')||Target.is(':password')||Target.is('textarea')) 
       { 
        Target.attr('data-selected', 'false'); 
       } 
      }}); 
     }); 
    </script> 

पूर्व ऐतिहासिक ब्राउज़रों के लिए, आप उपयोग कर सकते हैं भद्दा:

 <script> 
     //The selector to get the text/password/textarea input that has focus is: jQuery('[name='+jQuery('body').data('Selected_input')+']') 
     jQuery(document).ready(function() { 
      jQuery('body').bind({'focusin': function(Event){ 
       var Target = jQuery(Event.target); 
       if(Target.is(':text')||Target.is(':password')||target.is('textarea')) 
       { 
        jQuery('body').data('Selected_input', Target.attr('name')); 
       } 
      }, 'focusout': function(Event){ 
       var Target = jQuery(Event.target); 
       if(Target.is(':text')||Target.is(':password')||target.is('textarea')) 
       { 
        jQuery('body').data('Selected_input', null); 
       } 
      }}); 
     }); 
    </script> 
0

आप केवल एक श्रोता की जरूरत है अगर आप (घटना बुदबुदाती का उपयोग करें और करने के लिए इसे बाँध दस्तावेज़); प्रपत्र प्रति एक, उचित है, हालांकि:

var selectedInput = null; 
$(function() { 
    $('form').on('focus', 'input, textarea, select', function() { 
     selectedInput = this; 
    }).on('blur', 'input, textarea, select', function() { 
     selectedInput = null; 
    }); 
}); 

(। शायद तुम selectedInput चर फार्म के लिए आगे बढ़ना चाहिए)

0

आप यह समारोह चलाता है इस

<input type="text" onfocus="myFunction()"> 

उपयोग कर सकते हैं जब इनपुट ध्यान केंद्रित किया है।

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