2011-02-06 3 views
0

пользователь может выбирать между двумя типами сообщений, каждый с разной длиной. 160 символов и 1071 символов поддерживаются типами сообщений.Переключение между двумя счетчиками jQuery

Ну, как правило, пользователь будет выбирать тип и писать свое сообщение. Но пока он пишет, он может изменить тип сообщения.

Это, как я использовать счетчик:

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 нужно как-то удалить? Но разве это не переписывается в моем случае?

ответ

3

Причина в том, что NobleCount не перезагружает прослушиватели событий, которые он связывает. Поэтому, когда вы вызываете .NobleCount() во второй раз, хотя он добавляет прослушиватель событий, который остановит вас при вводе большего количества max_chars, старый все еще существует, поэтому он будет продолжать блокировать вас от ввода меньшего количества max_chars.

Решение заключается в добавлении 2 вызова функции в файл NobleCount:

В строках 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, так это выглядит некрасиво, хотя, если вы перечисляете в яваскрипта кадре вы увидите, что ив реализован aforementio Нед изменить)

я, вероятно, следует отметить, что это не самый лучший обходной путь, потому что если у вас есть какой-то другой keydown или keyup слушателя он удалит их, а также, хотя ив показал вам, где проблема, это не так трудно сделать это исправление более твердое отсюда.

Также, пожалуйста, свяжитесь с автором плагина с описанием ошибки, обходным путем и т. Д., Чтобы он мог реализовать это для масс.

Смежные вопросы