ie11下window.event.returnVaue=false;無效


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();
        }
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM