2010-07-29 3 views
1

J'ai obtenu ce article pour cela, mais j'ai trouvé que cela ne fonctionne pas car j'ai donné plusieurs classes dans la même zone de texte. Comment convertir ceci pour travailler avec plusieurs classes. Je ne sais pas comment utiliser les sélecteurs pour travailler avec.comment créer un effet de filigrane en utilisant jquery dans asp.net

Je l'utilise comme celui-ci

<div class="inbox3full"> 
    <div class="threeinbg"><asp:TextBox ID="txtSortOrder" CssClass="threein water" 
      Text='<%# Bind("SortOrder") %>' runat="server" ToolTip="Type your Sort Order"></asp:TextBox></div> 
</div> 

avec jquery comme

<script type="text/javascript"> 
// $(document).ready(function() { 
     $(function() { 

      $(".water").each(function() { 
       $tb = $(this); 
       if ($tb.val() != this.title) { 
        $tb.removeClass("water"); 
       } 
      }); 

      $(".water").focus(function() { 
       $tb = $(this); 
       if ($tb.val() == this.title) { 
        $tb.val(""); 
        $tb.removeClass("water"); 
       } 
      }); 

      $(".water").blur(function() { 
       $tb = $(this); 
       if ($.trim($tb.val()) == "") { 
        $tb.val(this.title); 
        $tb.addClass("water"); 
       } 
      }); 
     }); 
    // }); 
    </script> 

EDIT est définie Sys.

.water{font-family: Tahoma, Arial, sans-serif;font-size:75%; color:black;} 

<script type="text/javascript"> 
    $(document).ready(function() { 
     $(".water").addClass('watermark'); 
     $(".watermark").live('focus', function() { 
      $tb = $(this); 
      if ($tb.val() == this.title) { 
       $tb.val(""); 
       $tb.removeClass("water"); 
      } 
     }).live('blur', function() { 
      $tb = $(this); 
      if ($.trim($tb.val()) == "") { 
       $tb.val(this.title); 
       $tb.addClass("water"); 
      } 
     }).blur();​ 
    }); 

    Sys.WebForms.PageRequestManager.getInstance().add_endRequest(function() { 
     $(".water").not(document.activeElement).blur(); 
    }); 
    </script> 
+0

Il devrait fonctionner même s'il a plusieurs classes. – aolde

+0

@Manticore: je l'ai ajouté explicitement. Sinon, il n'a pas été mentionné dans le code et j'ai essayé les deux voies bien que –

+0

Désolé, oui, vu l'autre ligne juste après que j'ai posté. – aolde

Répondre

2

Au lieu d'un .each() comme vous, il est plus facile de tirer le gestionnaire blur, comme celui-ci (modifié pour utiliser .live() puisque vous les ajouter dans un UpdatePanel):

$(function() { 
    $(".water").addClass("watermark"); 
    $(".watermark").live('focus', function() { 
    $tb = $(this); 
    if ($tb.val() == this.title) { 
     $tb.val(""); 
     $tb.removeClass("water"); 
    } 
    }).live('blur', function() { 
    $tb = $(this); 
    if ($.trim($tb.val()) == "") { 
     $tb.val(this.title); 
     $tb.addClass("water"); 
    } 
    }).blur();​ 
}); 

You can see it working here . Cela met le filigrane/titre dans si la boîte était initialement vide, ce qui est généralement ce que vous voulez. De même, lorsque votre PanelPanel se termine, vous aurez envie d'appeler .blur() sur ces éléments à nouveau pour appliquer le filigrane fraîchement créé ceux, comme ceci:

Sys.WebForms.PageRequestManager.getInstance().add_endRequest(function() { 
    $(".water").not(document.activeElement).blur(); 
}); 

Cela brouiller tous les éléments sauf celui qui est actuellement concentré, pour ne pas interrompre l'utilisateur qui tape.

+0

@Nick: J'ai essayé le code ci-dessus. Il ne fonctionne pas avec mon code bien qu'il travaille sur l'endroit que vous avez montré. :( –

+0

@Shantanu - Est-ce que vos éléments sont ajoutés dynamiquement, via un UpdatePanel ou quelque chose? –

+0

@Nick: Oui, j'ajoute dynamiquement des contrôles et aussi en utilisant UpdatePanel avec ajax 3.5 –

Questions connexes