2009-05-27 4 views
0

J'utilise plusieurs jeux de cadres sur une page, et chaque jeu de cadres a un bouton associé pour effectuer une publication côté serveur/client. Je voulais changer la touche d'entrée par défaut pour sélectionner le bon bouton et c'était ma solution en utilisant jQuery.Modifier la clé d'entrée avec jQuery?

$("#<%= SearchCustomers.ClientID %>").find(":input").click(function() { $(this).parents("FIELDSET").addClass("default"); }).blur(function() { $(this).parents("FIELDSET").removeClass("default"); }); 
    $("#<%= SearchGroups.ClientID %>").find(":input").click(function() { $(this).parents("FIELDSET").addClass("default"); }).blur(function() { $(this).parents("FIELDSET").removeClass("default"); }); 


    $(document).keypress(function(e) { 
     if ((e.which && e.which == 13) || (e.keyCode && e.keyCode == 13)) { 
      $(".default").find(":submit,:button").click(); 
      return false; 
     } 
    }); 

Cela fonctionne parfaitement, mais je cherchais des façons d'améliorer cela. À l'heure actuelle, le code dépend de moi définissant les framesets à "runat = serveur" afin que je puisse accéder à la propriété "ClientID" et injecter l'ID dans mon javascript. Cela rend le code un peu moins réutilisable, donc j'étais curieux de savoir si quelqu'un d'autre avait une meilleure idée ...

Merci pour vos commentaires!

Répondre

1

Depuis vos deux premières lignes sont tellement semblables je réduis à:

$('FIELDSET').find(":input").click(function() { 
    $(this).parents("FIELDSET").addClass("default"); }).blur(function() { 
    $(this).parents("FIELDSET").removeClass("default"); }); 

S'il n'y a pas d'autres framesets sur la page que les deux que vous aimez, cela devrait être bien. Ensuite, vous n'avez pas besoin d'avoir le ClientID.

Si vous ne pouvez pas garantir ce sont les deux seuls sur la page, alors je pense que vous avez besoin du runat = serveur et ClientID - parce que vous n'avez en fait besoin d'identifier de manière unique ces deux particuliers framesets

EDIT: Sinon, vous pouvez marquer fieldsets que vous voulez avoir présentent ce comportement avec une classe particulière:

<fieldset class='UseAutoEnterKey'> .... 

Ensuite, vous pouvez ajouter le comportement tout en un avec le sélecteur de classe:

$('FIELDSET.UseAutoEnterKey').find(......... 
+0

J'aime l'idée de classe, puisque le code est utilisé dans un widget, je ne peux pas garantir qu'il n'y aura pas d'autres FRAMESETS sur la page. Merci! – Zachary

+0

Pour les points bonus, ce serait une excellente expérience pour apprendre à créer des plugins jquery. Ce serait un joli plugin simple, de sorte que le code sur la page serait simplement: $ ('select my fieldsets'). UseAutoEnterKey(); – Clyde

+0

Je vais tenter le coup, ce sera un bon exercice ... Je posterai mes résultats ici ... Zach – Zachary

Questions connexes