2017-07-26 163 views
4

我想要允許輸入比如1:10,但不是1; 10。但是:和;都對應於keyCode 186,所以使用keyCode來防止;鍵輸入到我的輸入字段不起作用。我也研究過使用charCodes,但charCodes沒有;或:值。最後,我看了一下ascii表格。它們具有分號和冒號值。有沒有辦法讓我可能使用ascii表來防止;鍵輸入到我的文本框中,但是:鍵被允許?還是有另一種方法可以讓我這樣做?我也考慮過連續檢測兩個關鍵輸入,以便我可以檢測到一個shift鍵輸入,但這似乎是一個骯髒的解決方案。如何防止輸入html文本輸入中的分號,但允許冒號?

$("input.form-1").bind({ 
    keydown: function(e) { 
     if(e.which ===186) { //trying to disallow semicolons, which also disallows colons 
      return false; 
     } 
    } 
}); 
+1

嘗試檢查'shiftKey'是否已關閉 –

+0

它們都對應於US-International或US-English鍵盤上的keyCode 186。那裏有很多其他的鍵盤佈局。這些方法可能無法正確工作。 –

回答

4

像羅裏說,你應該使用on。而不是檢查shiftKey,你也可以檢查事件的key屬性。 MDN KeyboardEvent.key

$("input.form-1").on({ 
 
    keydown: function(e) { 
 
     if(e.key === ";") { // disallow semicolon 
 
      return false; 
 
     } 
 
    } 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<input class="form-1" type="text" />

2

首先,不要使用bind()。它已被棄用時間前。改爲使用on()

要解決你的問題,你需要,如果shift鍵被按下檢測,以便您可以使用事件的shiftKey屬性:

$("input.form-1").on({ 
 
    keydown: function(e) { 
 
    if (!e.shiftKey && e.which === 186) { 
 
     return false; 
 
    } 
 
    } 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<input class="form-1" type="text" />

+0

我認爲它會是'!e.shiftKey',因爲''shiftKey'關閉時會出現':',他想要允許! –

+0

你是對的,謝謝。 –

+1

我想這是假設一個傳統的querty-ish鍵盤。在每個國家,分號和分號總是這些相同的按鍵? –

1

你只是嘗試e.keycode的keycode : 58和; 59.如果你想爲信,或者你只是提到以下代碼文本中輸入符號的任何鍵碼。

<html> 
 
<body> 
 

 
<input type="text" size="40" onkeypress="myFunction(event)"> 
 

 
<p id="demo"></p> 
 
<script> 
 
function myFunction(event) { 
 
    var x = event.keyCode; 
 
    document.getElementById("demo").innerHTML = x; 
 
} 
 
</script> 
 

 

 
</body> 
 
</html>

+0

請注意,keyCode在這裏與您使用過時的'on *'事件屬性不同 - 這本身就是一個壞主意。在不顯眼的處理程序或jQuery中,鍵碼是186(https:// jsfiddle。net/5u8czo29 /)作爲OP正確使用 –

+0

是否有多種定義的keyCode用於每種類型的事件處理程序?我看到一些使用59作爲keyCode的人;和其他人使用186 –

0

檢查的鍵碼,如果條件關鍵詞都英寸

$("input.form-1").on({ 
    keydown: function(e) { 
     if(e.key === ";") { // disallow semicolon 
      return false; 
     } 
    } 
}); 
+0

爲什麼要檢查兩者?你不相信'e.key ===「;」'? –

+0

是的,你說得對'e.key ===「;」'就夠了:) –

相關問題