在两个jQuery计数器之间切换

时间:2011-02-06 23:39:40

标签: jquery noble-count

用户可以在两种消息类型中进行选择,每种消息都有不同的长度。 160个字符和1071个字符是支持的消息类型。

通常用户会选择一种类型并写下他的消息。但在他写作的时候,他可能会改变消息类型。

这是我使用计数器的方式:

switch(max){
        case 160:
            $('#message').NobleCount('#messageInfo',{
                max_chars: max,
                block_negative: true
            });
        break;
        case 1071:  
            $('#message').NobleCount('#messageInfo',{
                max_chars: max,
                block_negative: true,
                on_update: function(t_obj, char_area, c_settings, char_rem){
                    //...
                }
            });     
        break;
    }

问题是当选择160并且用户已写入160个字符并切换到1071个字符时,计数器显示911为剩余但不允许用户输入更多字符。

每次用户切换消息类型时,我都会调用上面的代码。有人对这个问题有所了解吗?也许noble-coun t应该以某种方式删除?但是,在我的情况下,它是不是被覆盖了?

1 个答案:

答案 0 :(得分:3)

原因是NobleCount不会重置它绑定的事件侦听器。所以当你第二次调用.NobleCount()时,虽然它添加了一个事件监听器来阻止你输入更大量的max_chars,旧的仍然存在,所以它会继续阻止你输入少量的max_chars。

解决方案是向NobleCount文件添加2个函数调用:

在第285和294行,更改:

-- $(t_obj).keydown(function(e) {
++ $(t_obj).unbind('keydown').keydown(function(e) {

-- $(t_obj).keyup(function(e) {
++ $(t_obj).unbind('keyup').keydown(function(e) {

( - 是旧行,++是替换它的行)

有关工作示例,请参阅:http://jsfiddle.net/Fm5dC/ (我将他的整个js文件从github复制到jsfiddle中,所以它看起来很难看,但如果你在javascript框架中滚动,你会看到我实现了上述的改变)

我应该提一下,这不是最好的解决方法,因为如果你有其他keydownkeyup监听器它也会删除它们,虽然我已经向你展示了问题所在,但它不是很难让这个修复从这里变得更加坚固。

此外,请与插件的作者联系,并附上错误说明,此解决方法等,以便他们可以为大众实现这一点。