3 回答

TA貢獻1794條經驗 獲得超8個贊
我認為問題在于 JS 只是返回 true 或 false。我只是嘗試粘貼使用Ctrl+V
但沒有任何反應,大概是因為 JS 正在讀取我的鍵擊以進行粘貼,但它們不是數字。
但是,如果我右鍵單擊鼠標并選擇粘貼,它就會起作用。
您可能必須擺脫 JS,或添加更多 keyCodes 以接受Ctrl+V
.

TA貢獻1783條經驗 獲得超4個贊
要允許用戶使用 Ctrl+V 或 Cmd+V 粘貼,檢查keyCode您的onkeydown事件中的那些,然后檢查粘貼的文本是否是事件中的數字onpaste,這是一個完整的示例:
<asp:TextBox ID="txtMobileNo" runat="server"
autocomplete="off" AutoCompleteType="Disabled" MaxLength="10"
onkeydown="return validateInput(event);"
onpaste="validateClipboard(event)"
Style="height: 25px;" />
<script type="text/javascript">
function validateInput(event) {
// Check if Ctrl+V or Cmd+V was pressed
if ((event.ctrlKey || event.metaKey) && event.keyCode == 86) {
return true;
// Check if numbers input
} else if ((event.keyCode >= 48 && event.keyCode <= 57) ||
(event.keyCode >= 96 && event.keyCode <= 105) ||
event.which == 8 || event.which == 46) {
return true;
}
// All checks failed
return false;
}
function validateClipboard(event) {
// Prevent clipboard data pasting
event.stopPropagation();
event.preventDefault();
// Get clipboard text data
var clipboardData = event.clipboardData || window.clipboardData;
var pastedData = clipboardData.getData('Text');
// Check if pasted data is a number, if true paste to text box
if (isNaN(pastedData) === false) {
var txtBox = document.getElementById('MainContent_txtMobileNo');
txtBox.value += pastedData;
}
}
</script>

TA貢獻1794條經驗 獲得超8個贊
我不確定您要匹配哪種數字格式,我假設您有這種格式的數字9999999999(十位數字)。
這是我能想到的最佳解決方案:
<asp:TextBox ID="txtMobileNo" runat="server" autocomplete="off"
AutoCompleteType="Disabled" MaxLength="10"
onblur="return validateNumber(this)"
Style="height: 25px;" />
keydown請注意,我使用了事件而不是onblur事件,這是因為在他們完成文本框輸入后和離開文本框時檢查數字是一種很好的做法。
<script>
function validateNumber(evt) { // this will get executed when user has stopped typing or pasting the value.
var isValid = isValidMobileNumber(evt.value);
if (!isValid)
{
evt.value = ''; // Clear if the number is not valid.
}
return isValid;
}
function isValidMobileNumber(number) {
var phoneRegex = /^\d{10}$/; /* to verify 10 digits in number */
/* var phoneRegex = /^[2-9]\d{2}[2-9]\d{2}\d{4}$/; // to verify 10 digits number with (-) in it. 999-999-9999 */
var digits = number.replace(/\D/g, "");
return phoneRegex.test(digits);
}
// The code below can be removed, read the explanation below the code.
document.getElementById('<%= txtMobileNo.ClientID %>').addEventListener('paste', (e) => {
e.preventDefault();
const text = (e.originalEvent || e).clipboardData.getData('text/plain');
if (isValidMobileNumber(text))
window.document.execCommand('insertText', false, text);
});
</script>
請注意,我已經paste為您的文本框綁定了一個事件,每次有人在文本框中粘貼內容后都會立即觸發該事件。但是,從技術上講,您可以從此處刪除此事件,程序將正常運行,這是因為onblur在您粘貼數據后無論如何都會觸發事件,最終將驗證粘貼的數據。因此,由您決定,您是希望在粘貼時立即驗證數據,還是希望在用戶離開控件時(粘貼或鍵入任何內容后)驗證數據。
添加回答
舉報