2013-04-08 63 views
1

我有以下代碼,適用於Firefox-20和Opera,但不適用於Chrome-26或​​IE-10。鍵入功能將印度逗號添加到金額中。JQuery代碼適用於Firefox,Opera,但無法在Chrome和IE中工作

$(document).ready(function() { 
    $("#readyArea").on('change', function() { 
     $("#underConstArea").val($(this).val()).trigger('change'); 
    }); 

$('.comma').on('keyup', this, function commaFormatted(){ 
     var delimiter = ","; // replace comma if desired 
     var amount = $(this).val().replace(/\,/g,''); 
     var a = amount.split('.',2); 
     var d = a[1]; 
     var i = parseInt(a[0],10); 
     if(isNaN(i)) { return ''; } 
     var minus = ''; 
     if(i < 0) { minus = '-'; } 
     i = Math.abs(i); 
     var n = new String(i); 
     var a = []; 
     var cnt=0; 
     while(n.length > 2) 
     { 
      if(cnt == 0) 
      { 
       var nn = n.substr(n.length-3); 
       n = n.substr(0,n.length-3); 
       cnt++; 
      } 
      else 
      { 
       var nn = n.substr(n.length-2); 
       n = n.substr(0,n.length-2); 
      } 
      a.unshift(nn); 
     } 
     if(n.length > 0) 
     { 
      a.unshift(n); 
     } 
     n = a.join(delimiter); 
     amount = n; 
     amount = minus + amount; 
     $(this).val(amount); 
    }); 
}); 

這裏是JSFiddle link。 (正如我所說,如果我在Firefox或Opera中打開此鏈接,js可以使用,但不能在Chrome或IE中使用)。控制檯上也沒有js錯誤。我是否需要針對Chrome和IE做一些特定的事情?

編輯

只是爲了澄清,這是不是在Chrome和IE射擊onChange事件。 Firefox和Opera也一樣。

+0

我在OS X上使用Chrome 26.0.1410.43,並且看到逗號就像在Firefox中一樣。他們應該看起來像這樣:'12,34,56,789'? (對不起,我不熟悉印度的逗號) – 2013-04-08 19:28:22

+0

對不起,如果我不清楚。深夜有點讓我迷惑不解。是的,逗號將出現在你的例子中。問題是onChange事件在Chrome和IE中沒有觸發。 – Snoopy 2013-04-09 02:10:58

回答

1

我在Chrome上進行了測試,並且逗號表現良好,但我從未見過underConstArea更新,但在Firefox離開文本框後我確實看到它更新。

我不確定那裏發生了什麼,但我有幾種修復方法。

首先,看起來$("#readyArea").on('change')火是否依賴於瀏覽器。我不知道爲什麼,但似乎Chrome在更改代碼時不會拋出更改事件。也許它試圖避免無限循環的變化;我不太確定。

如果您對underConstArea只有在數字完成時更新(因爲它在Firefox中表現不佳),您可以在focusout而不是change上進行更新。我改變了你的頂線

$("#readyArea").on('focusout', function() { 
    $("#underConstArea").val($(this).val()); 
}); 

它在Chrome和Firefox中對我的工作很好。 Here是更新的小提琴。

或者,如果您希望每次用戶輸入時都更新,只需在您的commaFormatted函數中更新underConstArea即可。只需在功能底部添加

$("#underConstArea").val(amount); 

。 和我提供的第二個選項link。請注意,我刪除了#readyArea上的任何事件。

+0

添加'$(this).trigger('change');'使得onChange在Chrome中也可以工作。演示小提琴jsfiddle.net/46brx/7/。然而,在我的頁面上,我使用'focusout'方法和手動觸發'onchange',即'$(this).trigger('change');'。不過,我仍然無法弄清Chrome爲何如此行事。 - 史努比37秒前編輯 – Snoopy 2013-04-09 05:22:11

相關問題