2010-04-07 7 views
2

Étant donné le javascript suivant (jquery)texte Javascript plus rapide remplacer

 $("#username").keyup(function() { 
      selected.username = $("#username").val(); 

      var url = selected.protocol + 
       (selected.prepend == true ? selected.username : selected.url) + "/" + 
       (selected.prepend == true ? selected.url : selected.username); 

      $("#identifier").val(url); 
     }); 

Ce code lit essentiellement une zone de texte (nom d'utilisateur), et quand il est tapé dans, il reconstitue l'URL qui est affichée dans une autre zone de texte (identifiant).

Cela fonctionne très bien - il n'y a aucun problème avec sa fonctionnalité. Cependant, il se sent «lent» et «lent». Existe-t-il un moyen plus propre/plus rapide d'accomplir cette tâche?

Voici le code HTML comme demandé.

<fieldset class="identifier delta"> 
    <form action="/authenticate/openid" method="post" target="_top" > 
     <input type="text" class="openid" id="identifier" name="identifier" readonly="readonly" /> 
     <input type='text' id='username' name='username' class="left" style='display: none;'/> 
     <input type="submit" value="Login" style="height: 32px; padding-top: 1px; margin-right: 0px;" class="login right" /> 
    </form> 
</fieldset> 

La zone de texte identifiant a juste une valeur définie en fonction de l'ancre de lien hypertexte d'un bouton.

+0

Pourriez-vous partager votre HTML s'il vous plaît. De plus, qu'est-ce qui est «sélectionné» et comment est-il défini? – Mottie

Répondre

5

Cache votre jquery objets ...

var username = $('#username'), 
    identifier = $('#identifier'); 

username.keyup(function() { 
    selected.username = username.val(); 

    var url = selected.protocol + 
     (selected.prepend == true ? selected.username : selected.url) + "/" + 
     (selected.prepend == true ? selected.url : selected.username); 

    identifier.val(url); 
}); 

Vous recherchez actuellement le Royaume deux fois sur chaque touche.

+0

Excellent! Je vous remercie! – Ciel

2

En dehors de la sauvegarde d'un IF de moins je ne vois aucune optimisation possible.

var url = selected.protocol + (selected.prepend == true ? selected.username + '/' + selected.url : selected.url + '/' + selected.username); 
1

Ouais comme les autres ont montré ... la seule optimisation que je peux voir les objets se déplace en dehors de la fonction:

var url = selected.protocol; 
var iden = $("#identifier"); 
$("#username").keyup(function() { 
selected.username = $(this).val(); 
iden.val(url + (selected.prepend == true ? selected.username + '/' + selected.url : selected.url + '/' + selected.username)); 
}) 
Questions connexes