2012-11-01 34 views
8

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

 $(function() { 
      var defaultText = ''; 
      $('input[id=input]').focus(function() { 
       defaultText = $(this).val(); 
       $(this).val(''); 
      }); 
      $('input[id=input]').blur(function() { 
       $(this).val(defaultText); 
      }); 
     }); 

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

+0

क्या आप प्लेसहोल्डर डालने की कोशिश कर रहे हैं? – nicooga

+0

आपको 'फोकस' पर अपने 'डिफ़ॉल्ट टेक्स्ट' को सेट और अनसेट करने के साथ कोई समस्या है, यह इनपुट के वर्तमान मूल्य के लिए 'डिफ़ॉल्ट टेक्स्ट' मान बदल रहा है। – doublesharp

उत्तर

17

अपने focus() विधि आप अगर यह यह साफ़ करने से पहले defaultText के बराबर होती है देखने के लिए जाँच करनी चाहिए, और अपने blur() समारोह में में, आप बस अगर val()defaultText सेट करने से पहले खाली हो गया है की जाँच की जरूरत है। यदि आप एकाधिक इनपुट के साथ काम करने जा रहे हैं, तो आईडी के बजाय कक्षा का उपयोग करना बेहतर है, इसलिए कक्षा "इनपुट" होने पर आपका चयनकर्ता input.input होगा। भले ही यह एक आईडी था, आप इसे input#input के रूप में संदर्भित करेंगे।

// run when DOM is ready() 
$(document).ready(function() { 
    $('input.input').on('focus', function() { 
     // On first focus, check to see if we have the default text saved 
     // If not, save current value to data() 
     if (!$(this).data('defaultText')) $(this).data('defaultText', $(this).val()); 

     // check to see if the input currently equals the default before clearing it 
        if ($(this).val()==$(this).data('defaultText')) $(this).val(''); 
    }); 
    $('input.input').on('blur', function() { 
     // on blur, if there is no value, set the defaultText 
     if ($(this).val()=='') $(this).val($(this).data('defaultText')); 
    }); 
}); 

इसे this jsFiddle में कार्रवाई में सेट करें।

+0

मैं फ़ंक्शन के भीतर डिफ़ॉल्ट टेक्स्ट सेट नहीं कर सकता, बस इसलिए कि यह कई स्थानों पर उपयोग किया जा रहा है और मैं जेएस फ़ाइल को बड़ा नहीं बनाना चाहता हूं। क्या कोई काम आसपास है, क्योंकि अगर उपयोगकर्ता कुछ टाइप करता है, तो फिर इनपुट पर क्लिक फिर से बदल जाता है। – Karl

+0

@ karl यह फ़ंक्शन में 'डिफ़ॉल्ट टेक्स्ट' सेट नहीं करता है। क्या आप डिफ़ॉल्ट रूप से फॉर्म को लोड करते समय इनपुट चाहते हैं? – doublesharp

+0

var defaultText = 'आपका डिफ़ॉल्ट टेक्स्ट'; ऐसा होता है। अलग-अलग इनपुट होते हैं, प्रत्येक एक अलग डिफ़ॉल्ट पाठ के साथ। मुझे इनपुट को साफ़ करने की आवश्यकता नहीं है यदि उपयोगकर्ता ने कुछ डाला है और क्लिक किया है, तो उस पर वापस क्लिक करें। – Karl

1

अपने कलंक हैंडलर में सिर्फ अगर उपयोगकर्ता कुछ भी नहीं लिखा गया है की जाँच करें, यह मामला वापस डिफ़ॉल्ट पाठ डाल में, इस तरह:

  $('input[id=input]').blur(function() { 
      if ($(this).val() == '') { 
       $(this).val(defaultText); 
      } 
     }); 
+0

$ (यह) होना चाहिए .val() == लेकिन धन्यवाद, मुझे इसके बारे में सोचने के लिए थोड़ा बेवकूफ़ लगता है: पी – Karl

+0

हां, मैंने ध्यान दिया कि इसे ठीक करने के बाद बाद में मेरे उत्तर पोस्ट करने और संपादित करने के बाद। उम्मीद है कि यह आपके लिए उपयोगी रहा है। – Nelson

0

एक पुरानी सवाल + मैं इसे नापसंद है, जब लोग बजाय एक और समाधान की पेशकश मेरी समस्या को ठीक करने के लिए लेकिन फिर भी: एक jQuery प्लगइन के साथ एक HTML प्लेसहोल्डर विशेषता का उपयोग करने से समस्या हल हो जाएगी।

आप HTML डेटा-विशेषताओं का भी उपयोग कर सकते हैं और उस से लिख/पढ़ सकते हैं।

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

  • कोई संबंधित समस्या नहीं^_^