2012-11-23 117 views
2

每當點'。'鍵入我的輸入(類型=數字)字段,我希望它替換爲逗號','。jQuery:修改鍵盤輸入值

$(box).find('input[type=number]').keypress(function(evt){ 
     if(evt.which==46){ 
      $(this).val($(this).val()+','); 
      evt.preventDefault(); 
     } 
    }); 

該事件很好解決,但相反,該字段完全是空的。怎麼了?

編輯

爲什麼我這樣做的原因是,Chrome瀏覽器(最新版本),違背了HTML5 recommandation,使用逗號並丟棄在輸入型點=數。我目前只爲Chrome開發,因爲目前我無法在其他地方測試我的應用程序。任何評論(異常?)的情況將不勝感激。

+0

建議使用'keyup'事件來代替。 – VisioN

+0

'alert($(this).val())'display – Naryl

+1

input'type =「number」'不會接受逗號','。你可能不得不改變輸入'type = text' –

回答

0

我們在這裏是我的朋友,不知道爲什麼,似乎有用的鍵碼爲190,而不是110

嘗試:

$(document).ready(function(){ 

    $(document).find('input[type=number]').live('keydown',function(evt){ 
      if(evt.which == 190){ 
       $(this).val($(this).val()+","); 
       evt.preventDefault(); 
      } 
     }); 

}); 

這對於實時預覽 http://jsfiddle.net/RTEcJ/8/

查看鍵碼,您可以嘗試在輸入中檢查您需要的鍵碼: http://www.cambiaresearch.com/articles/15/javascript-char-codes-key-codes

+0

我使用jQuery 1.6,'on()'不起作用。更重要的是,使用'keyup','evt.which'匹配鍵碼而不是charcode。而不是46,對於數字小鍵盤點將是110,而對於其他方式則可以這樣做(取決於鍵盤映射)。 –

+0

現在請嘗試,那麼我真的建議你更新你的jQuery版本。 – sbaaaang

+0

不,還是一樣的行爲:字段變成空白... –

0

你可以只使用一個子像這樣:

str.substring(0,str.length - 1) + ',' 

然而,這可能不是一個理想的解決方案。

0

你的代碼似乎在同時運行的jsfiddle它的工作:

$(document).find('input').keypress(function(evt){ 
     if(evt.which==46){ 
      $(this).val($(this).val()+','); 
      evt.preventDefault(); 
     } 
    });​ 

http://jsfiddle.net/cornel_gav/cDE3L/

+1

它將用於輸入'type = text',但OP使用輸入'type = number'。 –

1

也許你的文件是不是已經準備好:

jQuery(document).ready(function() { 
    // your code 
}); 
+1

OP特別聲明「***事件很好解決,但是.. ***」 –

2
$(this).val($(this).val() + ','); 

這可能工作,如果你正在打字,並且總是希望在文字的末尾加上','符號。但是如果將光標置於文本中間,然後按'。'標誌?

+0

找到了一個解決方案:http://stackoverflow.com/questions/1064089/inserting-a-text-where-cursor-is -using-javascript-jquery – Micah

0

要使字符替換工作在任何光標位置,您可以綁定到keyup事件並替換this.val()中已插入的字符。

$(document).on('keyup','.myField"]', function(e,i){ 
    if(e.keyCode==107) 
    { 
     var start = this.selectionStart, 
      end = this.selectionEnd; 
     $(this).val($(this).val().replace(/\+/,'|')); 
     this.setSelectionRange(start, end); 
    } 
}); 
+0

這不起作用,因爲如果輸入無效,val()不會在許多瀏覽器中返回任何內容...... –