2010-06-29 47 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