2012-05-09 62 views
1
<input type="text" class="dot"> <br /> 
<input type="text" class="dot"> <br /> 
<input type="text" class="dot"> <br /> 

$('.dot').keydown(function(){ 
     $(this).val($(this).val().toString().replace(/\./g, ',')); 
}) 

http://jsfiddle.net/ZtkBW/非重複逗號

在這個例子中我更換點到逗號。我如何阻止在當前輸入中添加兩個逗號?

如果在輸入中已經有一個逗號,那麼應該刪除下一個。

回答

4

這是試圖解決使用正則表達式問題的經典案例,現在你有兩個問題...

這並不清楚你想要什麼,但是這會停止多次按下逗號鍵。它應該距離這裏很短的一步,以檢測期間(代碼190),並用它做任何你想做的事情。

$('.dot').keydown(function(e){ 
    if (e.which == 188) { 
     if (this.value.indexOf(',') != -1) { 
      e.preventDefault(); 
      return false; 
     } 
    } 
})​; 
+0

+1一個明智的解決辦法,而對沒有包裹DOM元素來獲得像我和其他人一樣的價值。 –

0

如果我知道你想什麼正確的,這裏做的一種方式:

var myVal = $(this).val(); 
myVal[myVal.indexOf(",")] = "."; 
myVal.split(",").join(""); 
$(this).val(myVal); 
+0

http://jsfiddle.net/ZtkBW/19/在這個例子中什麼也沒有發生 –

2

使用keypress事件,而不是​​事件(如​​不被重複按鍵觸發)。

查找.,個字符,如果文本中已有逗號,則通過返回false來停止事件。

由於事件是可停止的,它發生在值更改之前,所以您需要使用超時以逗號替換句點。

$('.dot').keypress(function(e){ 
    var txt = $(this).val(); 
    if (e.which == 46) { 
     if (txt.indexOf(',') != -1) { 
      return false; 
     } else { 
      var t = $(this); 
      window.setTimeout(function(){ 
       t.val(t.val().replace('.', ',')); 
      }, 0); 
     } 
    } else if (e.which == 44) { 
     return txt.indexOf(',') == -1; 
    } 
}); 

演示:http://jsfiddle.net/eAkUc/1/

1
$('.dot').keypress(function(e){ 
    if(($(this).val().indexOf(',') != -1 || $(this).val().indexOf('.') != -1) && 
     (e.charCode==','.charCodeAt(0) || e.charCode=='.'.charCodeAt(0))) 
     e.preventDefault(); 
    else 
     $(this).val($(this).val().toString().replace(/\./g, ',')); 
})​;​ 

DEMO