1、需求
在ie8及以上版本瀏覽器中,輸入框只能輸入大小寫字母、數字、空格。
2、階段一
js代碼:
/**
* 只能是英文和數字以及空格 <input onkeydown="onlyEngNumSpace();">
*/
function onlyEngNumSpace() {
//alert(event.keyCode + "event.shiftKey=" + event.shiftKey);
if ((event.keyCode >= 48 && event.keyCode <= 57)
|| (event.keyCode >= 96 && event.keyCode <= 105)) {
if(event.shiftKey) {
// 按下了shift組合鍵
event.returnValue = false;
}
// 考慮小鍵盤上的數字鍵
} else if (event.keyCode >= 65 && event.keyCode <= 90) {
// 考慮大小寫字母鍵
} else if (event.keyCode == 8) {
// backspace鍵
} else if (event.keyCode == 46) {
// delete鍵
} else if (event.keyCode == 37) {
// 左方向鍵
} else if (event.keyCode == 39) {
// 右方向鍵
} else if (event.keyCode == 32) {
// 空格
} else {
event.returnValue = false;
}
}
3、階段二
經測試在中文輸入法時敲擊鍵盤字母鍵后無法輸入字母,后增加js提示切換輸入法(js代碼紅色部分)。經測試效果不太理想,有時會不停的彈出提示好多次。
最后在jsp的input中增加style設置(jsp代碼紅色部分),直接禁止表單使用文本框輸入法。
jsp代碼:
<input id="partNum_01" class="row_complete_txt_5" type="text" style="ime-mode:disabled;"
onKeyDown="onlyEngNumSpace();" onKeyUp="textUp(this, 3);"
onfocus="effectTxtFocus(this, '', '');"
onblur="effectTxtBlur(this, '', '');" />
js代碼:
/**
* 只能是英文和數字以及空格 <input onkeydown="onlyEngNumSpace();">
*/
function onlyEngNumSpace() {
//alert(event.keyCode + "event.shiftKey=" + event.shiftKey);
if (event.keyCode === 229) {
event.returnValue = false;
// 提示切換輸入法
//window.parent.bootbox_alert("請您先將輸入法切換至英文后,再繼續輸入數字和字母。");
console.log("onlyEngNum,請您先將輸入法切換至英文后,再繼續輸入數字和字母。");
} else if ((event.keyCode >= 48 && event.keyCode <= 57)
|| (event.keyCode >= 96 && event.keyCode <= 105)) {
if(event.shiftKey) {
// 按下了shift組合鍵
event.returnValue = false;
}
// 考慮小鍵盤上的數字鍵
} else if (event.keyCode >= 65 && event.keyCode <= 90) {
// 考慮大小寫字母鍵
} else if (event.keyCode == 8) {
// backspace鍵
} else if (event.keyCode == 46) {
// delete鍵
} else if (event.keyCode == 37) {
// 左方向鍵
} else if (event.keyCode == 39) {
// 右方向鍵
} else if (event.keyCode == 32) {
// 空格
} else {
event.returnValue = false;
}
}
4、階段三
經測試ie11下上述js控制無效,通過分析發現window.event.returnVaue=false;這句話並不能阻止字符輸入到輸入框中。
查了一下資料,一種粗糙的解法是在window.event.returnValue=false;后面再加一句:if (window.event.preventDefault) window.event.preventDefault();
這樣可以阻止字符輸入到輸入框(js代碼紅色部分)。
js代碼:
/**
* 只能是英文和數字以及空格 <input onkeydown="onlyEngNumSpace();">
*/
function onlyEngNumSpace() {
//alert(event.keyCode + "event.shiftKey=" + event.shiftKey);
if (event.keyCode === 229) {
event.returnValue = false;
if (window.event.preventDefault) {
window.event.preventDefault();
}
// 提示切換輸入法
//window.parent.bootbox_alert("請您先將輸入法切換至英文后,再繼續輸入數字和字母。");
console.log("onlyEngNum,請您先將輸入法切換至英文后,再繼續輸入數字和字母。");
} else if ((event.keyCode >= 48 && event.keyCode <= 57)
|| (event.keyCode >= 96 && event.keyCode <= 105)) {
if(event.shiftKey) {
// 按下了shift組合鍵
event.returnValue = false;
if (window.event.preventDefault) {
window.event.preventDefault();
}
}
// 考慮小鍵盤上的數字鍵
} else if (event.keyCode >= 65 && event.keyCode <= 90) {
// 考慮大小寫字母鍵
} else if (event.keyCode == 8) {
// backspace鍵
} else if (event.keyCode == 46) {
// delete鍵
} else if (event.keyCode == 37) {
// 左方向鍵
} else if (event.keyCode == 39) {
// 右方向鍵
} else if (event.keyCode == 32) {
// 空格
} else {
event.returnValue = false;
if (window.event.preventDefault) {
window.event.preventDefault();
}
}
}