用户可以在两种消息类型中进行选择,每种消息都有不同的长度。 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应该以某种方式删除?但是,在我的情况下,它是不是被覆盖了?
答案 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框架中滚动,你会看到我实现了上述的改变)
我应该提一下,这不是最好的解决方法,因为如果你有其他keydown
或keyup
监听器它也会删除它们,虽然我已经向你展示了问题所在,但它不是很难让这个修复从这里变得更加坚固。
此外,请与插件的作者联系,并附上错误说明,此解决方法等,以便他们可以为大众实现这一点。