input type="number"


input控件數字輸入控制總結:

  1、type="number" 

    12---->12.  這樣的變化js無法捕獲

    未輸入model值為 undefined,輸入之后清空model值為 null

 

解法思路:

  1、正則匹配提交之前判斷

  2、監聽keyup事件、keydown事件

      不讓輸入 監控鍵盤code、

        if (theEvent.preventDefault) {
          theEvent.preventDefault();
        } else { // ie
          theEvent.returnValue = false;
        }

      重新替換

        element.val( value ? value[0] : null);

情景:

  移動端 input控件,調數字鍵盤,在輸入小數點時光標會自動跳到小數點前面。安卓6.0.1的版本會這樣。

question:

  1、調原生數字鍵盤的方法,必須用 type="number"?(用type="text",正則校驗比較簡單)

      通過其他約定的屬性 調原生數字鍵盤,這時 修改type="text"

    網上有人說,增加h5屬性 pattern="[0-9]", (經試驗沒什么用)

  1、如何區分數字12.0和12

    如何用js表示 "形如12. " 這樣的數字

      2、如何拿到 input inner-editor的值,查看瀏覽器代理,這是瀏覽器渲染的

      3、光標位置的控制 

    瀏覽器:IE、非IE

    

function getTxt1CursorPosition(){
    var oTxt1 = document.getElementById("txt1");
    var cursurPosition=-1;
    if(oTxt1.selectionStart){//非IE瀏覽器
        cursurPosition= oTxt1.selectionStart;
    }else{//IE
        var range = document.selection.createRange();
        range.moveStart("character",-oTxt1.value.length);
        cursurPosition=range.text.length;
    }
    alert(cursurPosition);
}

    type="number"時 不支持 ,DOM的光標位置屬性,type="text" 時支持

      

    

  4、chrome中, 如果輸入了一些非數字的字符,就會返回undefined  通過event.currentTarget.validity.badInput=== true可以捕捉到這一信息,event.currentTarget.validity.valid(這一屬性很渣,12.3時竟然是false)

修正keyAllow(angular.js寫的一個指令)

if (keyAllow === "amount") {
                            var model = element.attr("v-model");
                            value = value.match(/^[0-9]*(\.?[0-9]{0,2})/);
                            element.attr("maxlength", value[0].indexOf(".") > -1 ? value[0].indexOf(".") + 3 : '');
                            value = parseFloat(value);
                            scope[model] = value;
                            var eVal = event.currentTarget.validity;
                            if(eVal.badInput){
                                if((scope.oldValue+'')== 'undefined'){
                                    element.val('');
                                }else if((scope.oldValue+'').length > 1){
                                    scope[model] = scope.oldValue;
                                }else{
                                    element.val('');
                                }
                            }
                            if(!isNaN(value)){
                                scope.oldValue = value;
                            }
                            return;
                        }

 其他思路:

   使用 event.stopPropagation() 阻止默認行為。input 元素的 keydown 事件發生並處理后,瀏覽器默認會將用戶鍵入的字符自動追加到 input 元素的值中

   微信不支持keyup, keydown, keyup?事件對象思路

 


免責聲明!

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



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