আইই 9 তে স্থানধারক


140

দেখে মনে হচ্ছে এটি খুব পরিচিত সমস্যা তবে গুগলে আমি যে সকল সমাধান পেয়েছি সেগুলি আমার নতুন ডাউনলোড করা আই 99-তে কাজ করে না।

কোনটি অর্ডার সক্ষম করতে আপনার প্রিয় উপায় Placeholderউপর সম্পত্তি inputএবং textareaট্যাগ?

.চ্ছিক: আমি এতে প্রচুর সময় হারিয়েছি এবং requiredএখনও সম্পত্তিটির সন্ধান করি নি। আপনি কি এই জন্য কিছু পরামর্শ আছে? স্পষ্টতই আমি পিএইচপি-তে মানটি পরীক্ষা করতে পারি, তবে ব্যবহারকারীকে সহায়তা করার জন্য এই সম্পত্তিটি খুব সুবিধাজনক।


আমি 4 বছর পরে HTML এ ফিরে আসছি into মানে আমি আমার পুরানো সরঞ্জামগুলি প্রতিস্থাপন করার জন্য কোনও পরামর্শের জন্য উন্মুক্ত। আমি প্রায় শূন্য থেকে পুনরায় চালু। আমি মূলত
জিকুয়ের সাথে এবং গুগলের

উত্তর:


185

এইচটিএমএল 5 প্লেসহোল্ডার জিকিউরি প্লাগইন
- ম্যাথিয়াস ব্যেনেন্স ( এইচটিএমএল 5 বয়লারপ্লেট এবং জেএসফ্রুতে সহযোগী ) দ্বারা

https://github.com/mathiasbynens/jquery-placeholder

ডেমো এবং উদাহরণ

http://mathiasbynens.be/demo/placeholder

PS
আমি এই প্লাগইনটি বহুবার ব্যবহার করেছি এবং এটি একটি ট্রিট কাজ করে। এছাড়াও এটিকে নেই যখন আপনি আপনার ফর্ম (... একটি বাস্তব ব্যথা আমি অন্য প্লাগিন পাওয়া যায়) জমা দিতে একটি মান হিসাবে স্থানধারক লেখা জমা দিন।


আমরা একটি কাস্টম সিআরএম নিয়ে কাজ করছি। আমি এই কোডটি এবং প্রত্যাশার মতো কাজগুলি যুক্ত করেছি তবে তারা জাভাস্ক্রিপ্টের মাধ্যমে তাদের ফর্মগুলি জমা দেয়। সাবমিট বাটন আছে onclick="_IW.FormsRuntime.submit(this.form);"। যাইহোক, আমি কি এই স্থানকর্তাকে প্রথমে স্থানধারীদের সাফ করার জন্য এই অনক্লিক ইভেন্টটি পরিবর্তন করতে পারি এবং তারপরে অনক্লিকটিতে থাকা এই সিআরএম কোডটি চালাতে পারি?
লীশ

1
আমি গিথুব জেএস ফাইলটি আমার এসআরসি কোডে অনুলিপি করেছি। এখনও কোনও স্থানধারকের সাথে যান না।
ফিলো

2
এটি প্রকৃতপক্ষে একটি ট্রিট কাজ করে, তবে একক পৃষ্ঠাগুলির অ্যাপ্লিকেশনগুলিতে এটি ব্যবহার করা ব্যথা। গতিশীল যুক্ত ক্ষেত্রগুলির জন্য আপনাকে এটিকে ম্যানুয়ালি ট্রিগার করতে হবে। তা ছাড়াও দুর্দান্ত কাজ করে!
smets.kevin

1
ধন্যবাদ, ঝরঝরে প্লাগইন, তবে আমার কাছে সমস্যা হ'ল ie9 স্থানধারক যখন পাঠ্য ইনপুটটি ফোকাসে থাকে তখন অদৃশ্য হয়ে যায়। এটি এইচটিএমএল 5 এর আচরণের চেয়ে আলাদা
জেরিটান

1
এটি একটি বড় 'তবে', $ ('ইনপুট') দিয়ে ভাল কাজ করে val ভাল () ইনপুট খালি হলে স্থানধারকটির মান দেয়। যেহেতু আমি এজেএক্স কাঠামোর সাথে কাজ করছি, সেই স্থানধারকগুলি সার্ভারে প্রেরণ করা হয়েছে ...
ডানুবিয়ান নাবিক

21

আমি মনে করি আপনি এটি যা খুঁজছেন তা: jquery-html5-प्लेसहোল্ডার-ফিক্স

এই সমাধানটি স্থানধারক সমর্থিত কিনা তা নির্ধারণ করতে বৈশিষ্ট্য সনাক্তকরণ ( মডার্নাইজারের মাধ্যমে ) ব্যবহার করে । যদি তা না হয় তবে সমর্থন যোগ করুন (jQuery এর মাধ্যমে)।


2
এটি কাজ করে, তবে এটি সর্বাধিক কোড নয়। উপরের অংশে $(this)একটি ভেরিয়েবল বরাদ্দ করা উচিত যা কোড জুড়ে ব্যবহার করা যেতে পারে। $যে প্রতিটি অভিব্যক্তি ব্যবহার করা $(this)হয় তার জন্য কল করা "এই 101 এর মতো jQuery লিখবেন না" এর বাইরে সরাসরি কোনও সংখ্যা নয়।
সামি সামহুরী

20
আপনাকে এই কোডটি সম্পর্কে সতর্ক থাকতে হবে যেহেতু আপনি যদি ফর্মটি জমা দেন তবে স্থানধারক মানটি ফর্মের মান হিসাবে জমা দেওয়া হবে। এটি জমা দেওয়ার আগে এটি পরিষ্কার করা উচিত।
এরিকবা

2
@chriscatfr আমার উত্তর (গ্রহণ বিবেচনা করুন stackoverflow.com/a/13281620/114140 ) হিসাবে আমি এটি একটি অনেক ভালো সমাধান দিকে যাতে ব্যবহারকারীরা নির্দেশ করবে মনে হয়।
ক্রিস জ্যাকব

এইচটিএমএল 5 বৈশিষ্ট্য যুদ্ধের জন্য আমি নতুন থাকি বলে কৌতুহল: আধুনিকীকরণ কি এটির কোনও খারাপ সমাধান হতে পারে বা jquery-html5- স্থানধারক-স্থির নিজেই (বা উভয়)?
স্নেকস

এটি সহজ এবং মার্জিত এবং আমার জন্য কাজটি করেছে।
গ্রুমানোজ

17

আপনি যদি jquery বা modenizer ব্যবহার না করে এটি করতে চান তবে নীচের কোডটি ব্যবহার করতে পারেন:

(function(){

     "use strict";

     //shim for String's trim function..
     function trim(string){
         return string.trim ? string.trim() : string.replace(/^\s+|\s+$/g, "");
     }

     //returns whether the given element has the given class name..
     function hasClassName(element, className){ 
         //refactoring of Prototype's function..
         var elClassName = element.className;
         if(!elClassName)
             return false;
         var regex = new RegExp("(^|\\s)" + className + "(\\s|$)");
         return regex.test(element.className);
     }

     function removeClassName(element, className){
         //refactoring of Prototype's function..
         var elClassName = element.className;
         if(!elClassName)
             return;
         element.className = elClassName.replace(
             new RegExp("(^|\\s+)" + className + "(\\s+|$)"), ' ');
     }

     function addClassName(element, className){
         var elClassName = element.className;
         if(elClassName)
             element.className += " " + className;
         else
             element.className = className;
     }

     //strings to make event attachment x-browser.. 
     var addEvent = document.addEventListener ?
            'addEventListener' : 'attachEvent';
     var eventPrefix = document.addEventListener ? '' : 'on';

     //the class which is added when the placeholder is being used..
     var placeHolderClassName = 'usingPlaceHolder';

     //allows the given textField to use it's placeholder attribute
     //as if it's functionality is supported natively..
     window.placeHolder = function(textField){

         //don't do anything if you get it for free..
         if('placeholder' in document.createElement('input'))
             return;

         //don't do anything if the place holder attribute is not
         //defined or is blank..
         var placeHolder = textField.getAttribute('placeholder');        
         if(!placeHolder)
             return;

         //if it's just the empty string do nothing..
         placeHolder = trim(placeHolder);
         if(placeHolder === '')
             return;

         //called on blur - sets the value to the place holder if it's empty..
         var onBlur = function(){
             if(textField.value !== '') //a space is a valid input..
                 return;
             textField.value = placeHolder;
             addClassName(textField, placeHolderClassName);
         };

         //the blur event..
         textField[addEvent](eventPrefix + 'blur', onBlur, false);

         //the focus event - removes the place holder if required..
         textField[addEvent](eventPrefix + 'focus', function(){
             if(hasClassName(textField, placeHolderClassName)){
                removeClassName(textField, placeHolderClassName);
                textField.value = "";
             }
         }, false);

         //the submit event on the form to which it's associated - if the
         //placeholder is attached set the value to be empty..
         var form = textField.form;
         if(form){
             form[addEvent](eventPrefix + 'submit', function(){
                 if(hasClassName(textField, placeHolderClassName))
                     textField.value = '';
            }, false);
         }

         onBlur(); //call the onBlur to set it initially..
    };

}());

প্রতিটি পাঠ্য ক্ষেত্রের জন্য আপনি এটি ব্যবহার করতে চান আপনার চালানো দরকার placeHolder(HTMLInputElement), তবে আমি অনুমান করি যে আপনি এটির জন্য এটি পরিবর্তন করতে পারেন! এছাড়াও, কেবল লোডের চেয়ে এটি এইভাবে করা মানে আপনি পৃষ্ঠাটি লোড হওয়ার সময় এটি ইনপুটগুলির জন্য কাজ করতে পারেন যা ডোম-এ নেই।

নোট করুন, শ্রেণিটি প্রয়োগ করে এটি কাজ করে: usingPlaceHolderইনপুট উপাদানটিতে, যাতে আপনি এটি স্টাইল করতে ব্যবহার করতে পারেন (উদাহরণস্বরূপ .usingPlaceHolder { color: #999; font-style: italic; }এটি আরও ভাল দেখানোর জন্য নিয়ম যুক্ত করুন )।


1
দুঃখিত - এটি করা সহজ কিনা আমি সত্যই জানি না - আমি অনুমান করি আপনি "চিহ্নগুলি" না দিয়ে আপনি আসল পাঠ্য মানটি প্রদর্শন করতে চান। আমি এটি করতে কেবল ভাবতে পারি হ্যাকটি হ'ল এটি কোনও পাঠ্য ইনপুটটিতে ফোকাস বা মান না থাকলে এটি পরিবর্তন করা হবে, অন্যথায় এটি পাসওয়ার্ড ক্ষেত্র হিসাবে প্রদর্শিত হবে।
মার্ক রোডস

@ স্টেফেনপ্যাটেন পাসওয়ার্ড ক্ষেত্র সহ স্থানধারীদের জন্য আমার ফিক্সটি দেখুন । আমি মার্ক যা বলেছিলেন ঠিক
তেমনটাই করি

8

এখানে একটি আরও ভাল সমাধান। http://bavotasan.com/2011/html5- placeholder-jquery-fix/ আমি কেবল আই 10 এর অধীনে ব্রাউজারগুলির সাথে কাজ করার জন্য এটি কিছুটা গ্রহণ করেছি

<!DOCTYPE html>
<!--[if lt IE 7]><html class="no-js lt-ie10 lt-ie9 lt-ie8 lt-ie7" lang="en"> <![endif]-->
<!--[if IE 7]><html class="no-js lt-ie10 lt-ie9 lt-ie8" lang="en"> <![endif]-->
<!--[if IE 8]><html class="no-js lt-ie10 lt-ie9" lang="en"> <![endif]-->
<!--[if IE 9]><html class="no-js lt-ie10" lang="en"> <![endif]-->
<!--[if gt IE 8]><!--><html class="no-js" lang="en"><!--<![endif]-->

    <script>
    // Placeholder fix for IE
      $('.lt-ie10 [placeholder]').focus(function() {
        var i = $(this);
        if(i.val() == i.attr('placeholder')) {
          i.val('').removeClass('placeholder');
          if(i.hasClass('password')) {
            i.removeClass('password');
            this.type='password';
          }     
        }
      }).blur(function() {
        var i = $(this);  
        if(i.val() == '' || i.val() == i.attr('placeholder')) {
          if(this.type=='password') {
            i.addClass('password');
            this.type='text';
          }
          i.addClass('placeholder').val(i.attr('placeholder'));
        }
      }).blur().parents('form').submit(function() {
        //if($(this).validationEngine('validate')) { // If using validationEngine
          $(this).find('[placeholder]').each(function() {
            var i = $(this);
            if(i.val() == i.attr('placeholder'))
              i.val('');
              i.removeClass('placeholder');

          })
        //}
      });
    </script>
    ...
    </html>

আই ই থেকে IE8 কাজ jQuery এর ইনপুট ধরনের নিপূণভাবে (চালু 1:48 টায় ডিসেম্বর 20, 2011 উপর বিল থেকে মন্তব্য খুঁজে বার করো অনুমতি দেয় না না bavotasan.com/2011/html5-placeholder-jquery-fix )
forste

ধরে নিও যে আপনি একটি ফর্ম জমা দিচ্ছেন। আমি দেখেছি বেশিরভাগ একক পৃষ্ঠাগুলি ফর্মগুলি ব্যবহার করে না। শুধু হ্যান্ডলারে ক্লিক করুন।
chovy

5

আপনি যদি কোনও বিবরণ ইনপুট করতে চান তবে আপনি এটি ব্যবহার করতে পারেন। এটি আইই 9 এবং অন্যান্য সমস্ত ব্রাউজারে কাজ করে।

<input type="text" onclick="if(this.value=='CVC2: '){this.value='';}" onblur="if(this.value==''){this.value='CVC2: ';}" value="CVC2: "/>

1
এটি নিজেই পরীক্ষা করে দেখেনি, তবে অনুমান করা যদি আপনি ক্লিক করার পরিবর্তে মাঠে ট্যাব করেন তবে এটি ভাল কাজ করে না। আমি এই বাগটি প্রচুর ওয়েবসাইটে দেখি বা এটি পছন্দ করি।
eselk

এই সমাধানের সাথে আপনাকে ফর্ম জমা দেওয়ার সময় এই মানটিও পরীক্ষা করতে হবে।
ইগোর জেরোসিমিć

আমি আশ্চর্য হয়েছি এটি কোনও ভোট পেয়েছে, এটি 2012/2013
লোকালপিসিগুয়ে

আপনি যদি ইনপুটটিতে লিখতে চান তবে স্থানধারকটি কী হওয়া উচিত ('সিভি 2:') আপনি যা টাইপ করেছেন তা মোছা হবে।
ড্যানিয়েল

2

প্লেসহোল্ডার সমর্থন করে না এমন ব্রাউজারগুলি সনাক্ত করতে মর্ডারনিজার ব্যবহার করে , আমি এগুলি সংশোধন করার জন্য এই শর্ট কোডটি তৈরি করেছি।

//If placeholder is not supported
if (!Modernizr.input.placeholder){ 

    //Loops on inputs and place the placeholder attribute
    //in the textbox.
    $("input[type=text]").each( function() { 
       $(this).val($(this).attr('placeholder')); 
    })
}

2
আপনাকে এই কোডটি সম্পর্কে সতর্ক থাকতে হবে যেহেতু আপনি যদি ফর্মটি জমা দেন তবে স্থানধারক মানটি ফর্মের মান হিসাবে জমা দেওয়া হবে। এটি জমা দেওয়ার আগে আপনার এটি সাফ করা উচিত।
ক্রিসকাটফার

3
@ ক্রিসকাটফর: এই উদাহরণে কেউ কীভাবে এটি সঠিকভাবে করবেন? যদি আমার স্থানধারকটি 'পাসওয়ার্ড' এবং আমার পাসওয়ার্ডটি আসলে 'পাসওয়ার্ড' হয়?
লাইন

আপনি এই জাতীয় ক্ষেত্রের জন্য "নোংরা" ধারণাটি ব্যবহার করতে পারেন। প্রবেশের পরে ক্ষেত্রটি পরিষ্কার হিসাবে পতাকাঙ্কিত করুন (সম্ভবত ডেটা-ময়লা = "মিথ্যা" ব্যবহার করুন)। যদি তারা স্থানধারক পাঠ্য পরিবর্তন না করে ফর্মটি জমা দেয় তবে আপনি দেখতে পাবেন যে ক্ষেত্রটি পরিষ্কার, তাই এটি পরিষ্কার করুন। যদি তারা এটি পরিবর্তন করে, এমনকি স্থানধারকের সমান মানতেও, তবে এটি নোংরা এবং আপনি সেই মানটি জমা দিন।
oooyaya

পাসওয়ার্ড এবং অন্যান্য সমাধানের জন্য দয়া করে jsfiddle.net/AlexenderPatel/1pv2174c/3 দেখুন
শিরিশ প্যাটেল

placeholderসম্পত্তিটি স্ট্রিং হিসাবে প্রমিতকরণ করা হয়েছিল => আসলে if( typeof $('<input type="text">').get(0).placeholder == "undefined" ){ ... }মডার্নিজারের প্রয়োজন নেই :::::::::::::::::::::::::::::: সমর্থন-নয়, পরীক্ষিত আইই 9 মোড এমুলেশন - কাজ করে।
jave.web

2

আমি জানি যে আমি দেরী করেছি কিন্তু আমি একটি সমাধান মাথায় serোকানোর সন্ধান পেয়েছি:

<meta http-equiv="X-UA-Compatible" content="IE=edge"/> <!--FIX jQuery INTERNET EXPLORER-->


আপনি এটি আই 9 তে পরীক্ষা করেছিলেন? কারণ অন্যথায়
আই

অবশ্যই এটি আশ্চর্যজনক, যে আই 9 এটি নিজেই সমর্থন করে না যে কোনও ট্যাগ এটি চালু করবে - এটি কি পরীক্ষামূলক বৈশিষ্ট্যটি ব্যাকথিন ছিল? এটি কোথাও রেফারেন্স করা হয়? :)
jave.web

1

এটি নীচে আইই -9 এ ব্যবহার করার জন্য। এটি আমার পক্ষে কাজ করে

জিকুয়েরিতে অন্তর্ভুক্ত করা দরকার:

jQuery(function() {
   jQuery.support.placeholder = false;
   webkit_type = document.createElement('input');
   if('placeholder' in webkit_type) jQuery.support.placeholder = true;});
   $(function() {

     if(!$.support.placeholder) {

       var active = document.activeElement;

       $(':text, textarea, :password').focus(function () {

       if (($(this).attr('placeholder')) && ($(this).attr('placeholder').length > 0) &&         ($(this).attr('placeholder') != '') && $(this).val() == $(this).attr('placeholder')) {
          $(this).val('').removeClass('hasPlaceholder');
        }
      }).blur(function () {
if (($(this).attr('placeholder')) && ($(this).attr('placeholder').length > 0) &&  ($(this).attr('placeholder') != '') && ($(this).val() == '' || $(this).val() ==   $(this).attr('placeholder'))) {
     $(this).val($(this).attr('placeholder')).addClass('hasPlaceholder');
}
});

$(':text, textarea, :password').blur();
$(active).focus();
$('form').submit(function () {
     $(this).find('.hasPlaceholder').each(function() { $(this).val(''); });
});
}
});

সিএসএস স্টাইলের অন্তর্ভুক্ত করা দরকার:

.hasPlaceholder {color: #aaa;}

1
আপনার ফর্ম্যাটিংটি এখানে ঠিক করা উচিত, যেমন ইন্ডেন্টেশন যুক্ত করা এবং আপনার উত্তরটি আপনার কোড থেকে আলাদা করুন
একটি দেরী

1

একটি দল প্রয়াত বিট কিন্তু আমি আমার চেষ্টা ব্যবহার এবং জাতীয় যে সুবিধা নেয় বিশ্বস্ত Modernizr । কোনও প্রকল্পে অনুলিপি / আটকানো এবং প্রয়োগ করা যেতে পারে। প্রতিবার কাজ করে:

// Placeholder fallback
if(!Modernizr.input.placeholder){

    $('[placeholder]').focus(function() {
      var input = $(this);
      if (input.val() == input.attr('placeholder')) {
        input.val('');
        input.removeClass('placeholder');
      }
    }).blur(function() {
      var input = $(this);
      if (input.val() == '' || input.val() == input.attr('placeholder')) {
        input.addClass('placeholder');
        input.val(input.attr('placeholder'));
      }
    }).blur();
    $('[placeholder]').parents('form').submit(function() {
      $(this).find('[placeholder]').each(function() {
        var input = $(this);
        if (input.val() == input.attr('placeholder')) {
          input.val('');
        }
      })
    });

}

JQuery ব্যবহার করে এই সমস্ত সমাধান..ফোঁটা jQuery ছাড়া কোনও সমাধান নেই?
স্পোক

0

আমি সাধারণত http://cdnjs.com/ এর বেশিরভাগ ক্ষেত্রেই ভাবি এবং তারা তালিকাভুক্ত হয়:

//cdnjs.cloudflare.com/ajax/libs/placeholder-shiv/0.2/placeholder-shiv.js

এই কোডটি কে তা নিশ্চিত নয় তবে এটি সোজা দেখায়:

document.observe('dom:loaded', function(){
  var _test = document.createElement('input');
  if( ! ('placeholder' in _test) ){
    //we are in the presence of a less-capable browser
    $$('*[placeholder]').each(function(elm){
      if($F(elm) == ''){
        var originalColor = elm.getStyle('color');
        var hint = elm.readAttribute('placeholder');
        elm.setStyle('color:gray').setValue(hint);
        elm.observe('focus',function(evt){
          if($F(this) == hint){
            this.clear().setStyle({color: originalColor});
          }
        });
        elm.observe('blur', function(evt){
          if($F(this) == ''){
            this.setValue(hint).setStyle('color:gray');
          }
        });
      }
    }).first().up('form').observe('submit', function(evt){
      evt.stop();
      this.select('*[placeholder]').each(function(elm){
        if($F(elm) == elm.readAttribute('placeholder')) elm.clear();
      });
      this.submit();
    });
  }
});

1
এই প্লাগইনটির প্রোটোটাইপ লাইব্রেরিরও প্রয়োজন
রসওয়িল

0

আমি ইন্টারনেটে অনুসন্ধান করেছি এবং এই সমস্যাটি হ্যান্ডেল করার জন্য একটি সাধারণ jquery কোড পেয়েছি। আমার পক্ষে, এটি সমাধান হয়েছে এবং 9 9 এ কাজ করেছে।

$("input[placeholder]").each(function () {
        var $this = $(this);
        if($this.val() == ""){
            $this.val($this.attr("placeholder")).focus(function(){
                if($this.val() == $this.attr("placeholder")) {
                    $this.val("");
                }
            }).blur(function(){
                if($this.val() == "") {
                    $this.val($this.attr("placeholder"));
                }
            });
        }
    });

2
আপনার স্থানধারক মান হয়। আপনি জমা দিলে সেগুলি প্রেরণ করা হবে। সঠিক উত্তরের স্থানধারক.জেএস সহ ক্ষেত্রগুলি খালি রাখা আছে
chriscatfr
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.