2010-04-07 57 views
2

考慮下面的JavaScript(jQuery的)更快的JavaScript的文本替換

 $("#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); 
     }); 

此代碼基本上讀取一個文本框(用戶名),當它被鍵入,它重建正在顯示在另一個文本框中的URL(標識符)。

這工作正常 - 它的功能沒有問題。然而,它感覺「緩慢」和「低迷」。有沒有更清潔/更快的方法來完成這項任務?

這是根據要求的HTML。

<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> 

標識符文本框只是基於按鈕的超鏈接錨點設置的值。

+0

你能分享你的HTML請。另外,什麼是「選擇」,以及它是如何定義的? – Mottie 2010-04-07 20:58:16

回答

5

緩存您的jQuery的對象......

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); 
}); 

你正在上的每個按鍵行程搜索DOM的兩倍。

+0

非常好!謝謝! – Ciel 2010-04-07 21:26:03

2

除了從少一個保存,如果我沒有看到任何優化可能。

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

呀因爲其他人已經表明...唯一的優化,我可以看到移動的功能外的對象:

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)); 
})