0

イベントを実行するjQueryで関数を作成しようとしています。私の目標は、ページが読み込まれたとき、またはユーザーがフィールドを空白にしたときに、メッセージをフィールドに入れる関数を作成することです。

$(function () {

  function focusField(id, message) {
    parent = $(this);

    id.color("#C8C8C8");
    id.value(message);

    parent.delegate(id, 'focus', function() {
      if( id.val() == message ) {
        id.val("");
        id.color("black");
      };
    });

    parent.delegate(id, 'keyup', function() {
      if( id.val() == "") {
        id.val(message);
        id.color("#C8C8C8");
      }
    });
  };

  $(".content").focusField($("#emaillogin"), "Email");

コンセプト関数を間違って使用していると思われるため、これは機能しません。しかし、このようにする方法はありますか?これは、関数を作成して要素で呼び出すことができるかどうかを意味しますが、イベントではなく、関数でイベントを呼び出します。

通常の関数の使用: $element.event(function)。可能であれば、関数内のイベントを要素にバインドしたいと考えています。

前もって感謝します!

4

1 に答える 1

1

はい、関数をjqueryプロトタイプにアタッチして、小さな変更を加えるだけです。

$(function () {

  $.fn.focusField = function(id, message) {
    return this.each(function(){
      var parent = $(this);

      //id.color("#C8C8C8"); <--- these make no sense, what were they supposed to be doing?
      //id.value(message); <--- these make no sense, what were they supposed to be doing?

      // i don't see a reason to delegate here, just bind to focus event directly.
      parent.delegate(id, 'focus', function() {
        if( id.val() == message ) {
          id.val(""); 
          //id.color("black"); <--- these make no sense, what were they supposed to be doing?
        };
      });

      // i don't see a reason to delegate here, just bind to focus event directly.
      parent.delegate(id, 'keyup', function() {
        if( id.val() == "") {
          id.val(message); 
          //id.color("#C8C8C8"); <--- these make no sense, what were they supposed to be doing?
        }
      });
    }
  }
  $(".content").focusField($("#emaillogin"), "Email");
});
于 2013-01-21T16:24:56.910 に答える