2011-02-06 77 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噸應該只是被刪除?但是在我的情況下,它不會被覆蓋嗎?

回答

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/ (我簡直複製從GitHub他的整個js文件到的jsfiddle,所以它看起來醜陋,但如果你在JavaScript框架滾動,你會看到,香港專業教育學院實施aforementio斯內德變化)

我也許應該指出,這是不是最好的解決方法,因爲如果你有一些其他​​或keyup監聽它會刪除它們爲好,但香港專業教育學院向您展示了其中的問題是,它並不難,使這個修復從這裏變得更加堅實。

此外,請聯繫插件的作者與錯誤描述,這個解決方法等,所以他可以實現這個爲羣衆。