2010-06-29 46 views
1

我寫了這個:字符計數器超慢 - jQuery的

$('[name=item-title]').live('keyup',function(k){ 
    char_limit=parseInt($('[data-charlimit]').attr('data-charlimit')); 
    total = char_limit-parseInt($(this).val().length); 
    $('.charcount span').text(char_limit-parseInt($(this).val().length)); 
}); 

但它開始去超慢,我會鍵入的字樣後會顯示一毫秒的前幾個字後。如果我得到250個單詞,它似乎就落後了將近3/4秒。任何想法爲什麼?對我而言,我寫的東西似乎相當小...

+0

是否需要使用'live'並按名稱而不是'id'選擇元素? – serg 2010-06-29 21:22:28

+0

我必須使用live,因爲文本字段是動態生成的,並且ID在技術上不存在於DOM中。 – 2010-06-29 21:30:38

回答

2
  1. 如果可能,預先計算char_limit。在打字過程中它不會改變。
  2. 使用total變量在第四行,或離開了它的計算完全
  3. 離開了parseInt小號可能除了第一個,他們是無用的。

這將使你

var char_limit=parseInt($('[data-charlimit]').attr('data-charlimit')); 
$('[name=item-title]').live('keyup',function(k){ 
    $('.charcount span').text(char_limit-$(this).val().length); 
}); 

我不知道,如果有多個,雖然char_limit S,因爲這會毀了那些。看來你現在的方法不允許那些。

+0

是的,parseInt的東西,第一個是需要的。但是,它仍然超級慢... – 2010-07-02 18:35:48

2

你正在做一個DOM遍歷每個角色,你不知道爲什麼它很慢?

// calculate upper limit once -- it won't change, presumably 
var char_limit=parseInt($('[data-charlimit]').attr('data-charlimit')); 

$('[name=item-title]').live('keyup',function(k){ 
    // length is already numeric, no need to parse it 
    var remaining = char_limit - $(this).val().length; 
    $('.charcount span').text(remaining); // use the result, note I renamed it 
}); 
+0

WTF,它仍然超級慢。我不明白爲什麼這會很慢。我正在做更多處理器沉重的事情,比如modals和常量AJAX調用(這是一個應用程序),它們都運行良好,但即使你的代碼和MvanGeest和我的這些對於任何瀏覽器來說都不那麼困難,慢? – 2010-07-02 18:39:51