在两个jQuery计数器之间切换
用户可以选择两种消息类型,每种消息类型的长度不同。支持160个字符和1071个字符的消息类型 通常情况下,用户会选择一种类型并编写消息。但在他写作时,他可能会更改消息类型 这是我使用计数器的方式:在两个jQuery计数器之间切换,jquery,noble-count,Jquery,Noble Count,用户可以选择两种消息类型,每种消息类型的长度不同。支持160个字符和1071个字符的消息类型 通常情况下,用户会选择一种类型并编写消息。但在他写作时,他可能会更改消息类型 这是我使用计数器的方式: switch(max){ case 160: $('#message').NobleCount('#messageInfo',{ max_chars: max, block_negative: tr
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为剩余字符,但不允许用户输入更多字符
每次用户切换消息类型时,我都调用上面的代码。有人对这个问题有想法吗?也许t应该被移除?但在我的例子中,它不是被覆盖了吗?原因是NobleCount不会重置它绑定的事件侦听器。因此,当您第二次调用.NobleCount时,虽然它添加了一个事件侦听器,可以阻止您输入较大的最大字符数,但旧的侦听器仍然存在,因此它将继续阻止您输入较小的最大字符数 解决方案是向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) {
-是旧的行,++是替换它的行
有关工作示例,请参见:
我将他的整个js文件从github复制到了JSFIDLE中,所以看起来很难看,尽管如果在javascript框架中滚动,您会看到我实现了上述更改
我可能应该提到,这不是最好的解决方法,因为如果你有其他的keydown或keydup监听器,它也会删除它们,尽管我已经告诉你了问题所在,但从这里开始,让这个修复变得更可靠并不难
另外,请与插件作者联系,提供错误描述、此解决方法等。这样他就可以为大众实现此功能。原因是NobleCount不会重置它绑定的事件侦听器。因此,当您第二次调用.NobleCount时,虽然它添加了一个事件侦听器,可以阻止您输入较大的最大字符数,但旧的侦听器仍然存在,因此它将继续阻止您输入较小的最大字符数 解决方案是向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) {
-是旧的行,++是替换它的行
有关工作示例,请参见:
我将他的整个js文件从github复制到了JSFIDLE中,所以看起来很难看,尽管如果在javascript框架中滚动,您会看到我实现了上述更改
我可能应该提到,这不是最好的解决方法,因为如果你有其他的keydown或keydup监听器,它也会删除它们,尽管我已经告诉你了问题所在,但从这里开始,让这个修复变得更可靠并不难
此外,请与插件作者联系,提供错误描述、解决方法等,以便他能够为大众实现这一点