2016-02-16 67 views
30

我需要輸入的內容仍然是type="text",但會在Android和iOS設備上打開數字鍵盤。在Android和iOS上查看網站時強制輸入數字

這是因爲輸入字段仍然會有字符,如£,,這在type="number"type="tel"中將不可能。

我發現您可以使用pattern="\d*"強制iOS上的數字鍵盤,但是這對Android沒有任何作用。

這是我到目前爲止有:

<input type="text" inputmode="numeric" pattern="\d*" value="£2,000,000" /> 

http://jsbin.com/nelodixeza/edit?html,output

+0

如果您只想禁用驗證,則可以使用「novalidate」屬性。 – pcagica

+0

@pcagica它與驗證無關,我只需要在'''type = text'''輸入中打開數字鍵盤即可。請閱讀這個問題... –

+0

所以我不明白這個問題對不起,你爲什麼不想輸入文本呢?正如你所說,你可以用數字鍵強制數字鍵盤。 – pcagica

回答

1

我用:

<input type="text" pattern="\d*" /> 

沒有別的是必要的。

在iPhone上運行得非常好,特別是使用新的鍵盤類型。與默認和Swiftkey一起使用。

此外,這適用於所有Android設備。

更新:

這給一個鏡頭:

<input type="text" step="0.01" pattern="[0-9]*"> 

<input type="text" min="0" max="100" pattern="[0-9]*"> 

Or 

<input type="text" pattern="\-?\d+(\.\d{0,})?"> 
+1

這是我已經使用的模式(請參閱問題)和'''pattern =「\ d *」'''在Android上不起作用 –

+0

如果您有這種工作的示例,請分享鏈接... –

+0

會做,但真的很快。爲什麼它*有*爲「」文本「'? – iSkore

1

我從事類似的東西

看看我的例子:https://jsfiddle.net/pj2uwmtL/6/

$("input.numbers").keypress(function(event) { 
    return /\d/.test(String.fromCharCode(event.keyCode)); 
}); 
+0

剛剛發現了一些奇怪的行爲,我發送給你(僅限Android)。如果你開始輸入數字,它不會讓你輸入任何字母,但如果你最初輸入一個字母,它將不起作用。讓我們看看我們如何解決這個問題。 –

+0

我剛剛發現這個問題,我認爲它非常符合你的要求:http://www.decorplanit.com/plugin/ –

+0

你能解釋一下這段代碼在做什麼嗎?我在Android上測試過,沒有運氣...... –

6

編輯(如果評論被清除)這個答案寫在指定的問題之前,它是移動網絡與移動應用程序。但是,這個答案將有助於那些在Android上使用WebView時尋找解決方案的人。

在Android上,用於顯示頁面的WebView可以覆蓋onCreateInputConnection。使用這種方法,您可以更改ime選項,儘管您仍然限於相同的數字類型。或者,您可以在creating your own ime type上工作。

一個例子:

@Override 
public InputConnection onCreateInputConnection(EditorInfo outAttrs) { 
    InputConnection inputConnection = super.onCreateInputConnection(outAttrs); 
    outAttrs.inputType = outAttrs.inputType | InputType.TYPE_NUMBER_VARIATION_NORMAL; 
    return inputConnection; 
} 

不過,雖然我敢肯定,上述將解決許多問題的人民,我想你需要的東西多一點複雜。我的建議是,無論鍵盤類型你用,你用Java來驗證和格式化輸入,這需要幾個步驟:

設置JavaScript接口

webView.addJavascriptInterface(new ValidationInterface(), "appValidator"); 

創建接口類

public class ValidationInterface { 

    //This method would only tell you if a char is invalid 
    @JavascriptInterface 
    public boolean isValid(String text){ 
     int len = text.length(); 
     //replace everything thats NOT 0-9, $, £, comma or dot 
     text = text.replaceAll("[^0-9$£,\.", ""); 
     //Its valid if the length didnt change (because nothing needs removing) 
     return text.length() == len; 
    } 

    //This method would strip out invalid text as you go 
    @JavascriptInterface 
    public String getValid(String text){ 
     //replace everything thats NOT 0-9, $, £, comma or dot 
     return text.replaceAll("[^0-9$£,\.", ""); 
    } 

} 

呼叫當文本改變了驗證

function validate(value) { 
    //ive not written js in a long time, you'll definitely need to tweak this 
    //EITHER do this 
    var valid = appValidator.isValid(value); 
    if (valid) { 
     //DO SOEMTHING 
    } ... 

    //OR try this 
    var validText = appValidator.getValid(value); 
    $('#theField').value(validText); //really not sure this is valid 
} 

//also just be aware you might need to use keyUp or somethign other than change 
//if you are replacing the text as you type, using getValid method 
<input id="theField" type="text" onChange="validate(this.value)" ... /> 
+0

無論如何得到這個實例?我從來沒有使用過Andriod的WebView,所以我不知道從哪裏開始。這是需要在網站上,這是爲了一個應用程序? –

+0

是的,這將是一個android應用程序的webview(因爲我認爲你標記的平臺,並沒有提及網站 - 我剛剛意識到你沒有添加這些標籤) –

+1

我已經授予這個答案的賞金,因爲它的唯一的作品(不適合我目前的需求,即它需要在一個正常的網站上工作)。 –