2012-12-06 17 views
0

和代碼段設置和取消設置必要時面膜:jQuery插件版本升級,我們使用​​

$('input.maskedInput').focus(function() { 

     $(this).mask("999-999-9999"); 
    }).blur(function() { 

     var numbers = $(this).val().replace(/-/g, '').replace(/_/g, ''); 
     $(this).val(numbers.toString()).unmask(); 
    }); 

這工作正常使用jQuery 1.3.2,但在升級到1.8.2它停止揭露,當用戶沒有錯誤離開該領域。需要調整什麼才能再次開始解除屏蔽?

回答

0

問題是,您在另一個模糊處理程序中刪除由插件附加的模糊處理程序(通過調用unmask)。爲了避免不可預知的行爲,在運行任何處理程序之前,jQuery本地保存對所有處理程序的引用。

  1. 模糊發生。輸入有2個模糊處理程序(你的和來自插件的);
  2. jQuery複製一個處理程序數組。
  3. 你的處理程序似乎首先運行。它調用unmask來移除第二個處理程序。但是在調度循環中仍然有一個參考。
  4. jQuery運行恢復掩碼的第二個處理程序。

我不知道爲什麼這段代碼與jq1.3.2協同工作。

爲了避免這種情況,您可以停止模糊事件的即時傳播。 http://api.jquery.com/event.stopImmediatePropagation/

.blur(function (ev) { 
     var numbers = $(this).val().replace(/-/g, '').replace(/_/g, ''); 
     $(this).unmask(); 
     ev.stopImmediatePropagation(); 
     $(this).val(numbers); 
    }) 

http://jsfiddle.net/tarabyte/XgYSz/

+0

非常感謝您的回覆和解釋清楚。您所描述的行爲正是我在控制檯上進行調試時所觀察到的 - 它會取消設置掩碼,然後再恢復,並想知道爲什麼會發生。 – Victor