3
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

IE8/9でもplaceholder実装するjQueryプラグイン

Last updated at Posted at 2015-08-30

ついでにplaceholderが実装されてるブラウザでは元の挙動を活かすオプション付き。
(IEとChromeとFirefoxで挙動が違うのが嫌な場合も使えます)

簡単に解説すると、トリガーをつけた input 要素に placeholder 属性をつっこめば、title属性で代替して表示してくれるっていうやつです。
なにげにtitle属性でいけちゃうんですよ。でも色はデフォルトのinputの色で出ちゃうのでclassだけつけかえるのです。

##サンプル
http://codepen.io/blurblue/pen/QjNKyp

##オプション
###cover
IE9以下以外のブラウザでも有効にします。
true で有効。
false か未設定で無効。

###submitDisable:
空かplaceholder文言と同じだった場合に先祖のform要素のsubmitをキャンセルします。
true でキャンセル有効。
false か未設定でキャンセル無効。

##プラグイン

// placeholder
$.fn.jqPlaceholder = function(options){
  // property
  var defaults = {
        cover: false,
        submitDisable: false
      },
      settings = $.extend({}, defaults, options);

  var init = function(){
    var input = $(this),
        label = input.attr('placeholder'),
        onFocus = function(){
          if(input.val() == label) input.removeClass('blur').val('');
        },
        onBlur = function(){
          if(input.val() == '') input.addClass('blur').val(label);
        },
        onSubmit = function(){
          return false;
        };
    if(isltIE8 || isIE9 || settings.cover){
      input.removeAttr('placeholder');
      input.addClass('blur').val(label).attr('title', '');
      input.on('focus', onFocus);
      input.on('blur', onBlur);
    } else {
      input.attr({'placeholder': label, 'title': ''});
    }
    if(settings.submitDisable){
      if(label == input.val() || label == ''){
        input.closest('form').on('submit', onSubmit);
      }
    }
  };
  this.each(function(){
    init.apply(this);
  });
};

※"isltIE8" は IE8以前、"isIE9" は IE9 のUA判定です(中身はtrue or false)。適当に実装してください。

##実装コード
今回は "js-placeholder" をトリガー用classとしました。
***HTML

<p><input type="text" placeholder="placeholder用文言" class="js-placeholder"> オプションなし</p>

***CSS
非フォーカス時にグレーにするだけなので色は適宜。

input.blur {
  color: #999;
}

***JS

$('.js-placeholder').jqPlaceholder({
  cover: true,
  submitDisable: true
});

プラグインにした意味はあまりないので、メインの必要な部分だけ実装すればいいとおもう。

3
4
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?