JavaScriptでプレースホルダつき入力欄を作る(JQuery実装)

JavaScript でプレースホルダつき入力欄を作る - blog.8-p.info

これは素晴らしい。
JQuery版もあったらいいなー。と思ったので作りました。

使い方

こんな感じです。

<script type="text/javascript" src="jquery-1.3.2.min.js"></script> 
<script type="text/javascript" src="jquery.placeholder.js"></script> 
<script type="text/javascript">
// <![CDATA[ 
$(document).ready(function(){
  $('#search').placeholder('検索したい単語を入れてね♪');
});
// ]]>
</script>

あとプレースホルダのスタイルを指定できるようにしたよ。

  $('#search').placeholder({
    word: '検索したい単語を入れてね♪',
    styleClass: 'myClass'
  });

ソースコード

jQuery.fn.placeholder = function(opts){
  
  if(typeof opts == 'string') {
    opts = {word:opts};
  }
  opts = jQuery.extend({
      word: '',
      styleClass: 'placeholder'
    },opts);
  
  return this.each( function() {
    var target = $(this);
    
    target.blur(
      function(){
        if(changed()) return;
        target.val(opts.word);
        target.addClass(opts.styleClass);
      }
    ).focus(
      function(){
        if(changed()) return;
        target.val('');
        target.removeClass(opts.styleClass);
      }
    ).blur();
    
    function changed() {
      if(target.val() == ''){
        return false;
      }else if(target.val() == opts.word && target.hasClass(opts.styleClass)){
        return false;
      }
      return true;
    }
  });
};

感想

  • prototype.jsを使った引用元のコードと比べてオブジェクト感がゼロなのに絶望した。
  • JQeuryは方言がすごい。慣れたら楽しいけど読み方を知らないと意味が分かりにくいなあ。

追記

うわあああぁぁぁーーー!!
いま気づいたけど、よく考えたらコレ何も入力しないままsubmitしたら「検索したい単語を入力してね♪」がpostされてしまうじゃないかー
引用元のonunloadイベントはそういうことだったのか。
これはいかん。でももう眠いから明日考えよう。