วิธีบังคับแป้นพิมพ์ด้วยตัวเลขในเว็บไซต์บนมือถือใน Android


94

ฉันมีเว็บไซต์บนมือถือและมีinputองค์ประกอบHTML อยู่ในนั้นดังนี้:

<input type="text" name="txtAccessoryCost" size="6" />

ฉันได้ฝังไซต์ลงในการWebViewใช้ Android 2.1 ที่เป็นไปได้เพื่อที่จะเป็นแอปพลิเคชัน Android

เป็นไปได้ไหมที่จะใช้แป้นพิมพ์ที่มีตัวเลขแทนที่จะเป็นแป้นพิมพ์เริ่มต้นที่มีตัวอักษรเมื่อinputองค์ประกอบHTML นี้เน้น

หรือเป็นไปได้ไหมที่จะตั้งค่าสำหรับแอปพลิเคชันทั้งหมด (อาจมีบางอย่างในไฟล์ Manifest ) หากองค์ประกอบ HTML ไม่สามารถทำได้


หากต้องการแป้นพิมพ์ตัวเลขบน iOS นอกเหนือจาก Android คุณควรทำสิ่งนี้: stackoverflow.com/a/31619311/806956
Aaron Grey

2
inputmode="number"แอตทริบิวต์ดูเหมือนว่าคำตอบที่ถูกต้องในช่วงปลายปี 2019: developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/... คำตอบที่ได้รับการโหวตสูงสุดในช่วงเวลาของความคิดเห็นนี้แนะนำtype="number"ซึ่งมาพร้อมกับข้อผิดพลาดบางประการ inputmodeดูเหมือนว่าจะส่งผลต่อการแสดงแป้นพิมพ์เสมือนจริงเท่านั้นแทนที่จะเป็นพฤติกรรม / ข้อ จำกัด ของอินพุต
SheffDoinWork

คำตอบ:


114
<input type="number" />
<input type="tel" />

ทั้งสองอย่างนี้แสดงแป้นพิมพ์ตัวเลขเมื่ออินพุตได้รับโฟกัส

<input type="search" /> แสดงแป้นพิมพ์ปกติพร้อมปุ่มค้นหาพิเศษ

ทุกอย่างดูเหมือนจะแสดงแป้นพิมพ์มาตรฐาน


จะดูวันนี้แล้วจะแจ้งให้คุณทราบว่าจะได้ผลหรือไม่ ขอบคุณ Richard!
ncakmak

1
สวัสดี Richard ไม่มีการทำงานช่องป้อนข้อมูลยังคงเปิดแป้นพิมพ์มาตรฐาน
ncakmak


1
โปรดทราบว่าแป้นพิมพ์สำหรับtype="tel"เป็นที่เลวร้ายtype="number"สำหรับตัวเลขการพิมพ์กว่าแป้นพิมพ์สำหรับ
Rory O'Kane

2
<input type="text" pattern="\d*" /> นอกจากนี้ยังนำขึ้นแป้นพิมพ์ตัวเลข แต่บน iOS ไม่ได้บน Android
Rory O'Kane

52

โน๊ตสำคัญ

ฉันโพสต์สิ่งนี้เพื่อเป็นคำตอบไม่ใช่ความคิดเห็นเนื่องจากเป็นข้อมูลที่ค่อนข้างสำคัญและจะดึงดูดความสนใจมากขึ้นในรูปแบบนี้

ในขณะที่เพื่อนคนอื่นชี้คุณสามารถบังคับให้อุปกรณ์แสดงแป้นพิมพ์ตัวเลขด้วยtype="number"/ type="tel"แต่ฉันต้องย้ำว่าคุณต้องระมัดระวังอย่างยิ่งกับสิ่งนี้

หากมีคนคาดว่าตัวเลขที่ขึ้นต้นด้วยศูนย์เช่นแสดงว่า000222เธอมีปัญหาเนื่องจากเบราว์เซอร์บางตัว (เช่น Chrome บนเดสก์ท็อป) จะส่งไปยังเซิร์ฟเวอร์222ซึ่งไม่ใช่สิ่งที่เธอต้องการ

เกี่ยวกับtype="tel"ฉันไม่สามารถพูดอะไรที่คล้ายกันได้ แต่โดยส่วนตัวแล้วฉันไม่ได้ใช้มันเนื่องจากพฤติกรรมของโทรศัพท์ที่แตกต่างกันอาจแตกต่างกันไป ฉัน จำกัด ตัวเองให้อยู่กับสิ่งง่ายๆpattern="[0-9]*"ที่ใช้ไม่ได้ใน Android


4
การฟอร์แมตอัตโนมัติอาจไม่เกิดขึ้นกับtype="tel". ข้อมูลจำเพาะหมายเหตุที่telไม่บังคับไวยากรณ์ใด ๆ ซึ่งแตกต่างจากnumberที่กำหนดให้ค่าของมันจะเป็นเลขทศนิยมที่ถูกต้อง
Rory O'Kane

ไม่ดียังไง? เรากำลังพยายามเร่งกระบวนการแบบฟอร์มสำหรับลูกค้ามือถือของเราและดูเหมือนว่าจะเป็นวิธีแก้ปัญหาที่ชัดเจน แต่เราก็ต้องการสิ่งที่น่าเชื่อถือเช่นกัน คุณโพสต์คำเตือนที่หนักแน่นไม่ให้ใช้วิธีนี้ ฉันสงสัยว่าคุณสามารถอธิบายเพิ่มเติมเกี่ยวกับเรื่องนี้ได้หรือไม่?
Philll_t

@Philll_t ผู้ใช้ต้องส่งข้อมูล '000222' แต่คุณในฝั่งเซิร์ฟเวอร์จะได้รับ '222' แทน คุณไม่เห็นว่าฟังก์ชั่นการใช้งานไม่สมบูรณ์หรือไม่ เซิร์ฟเวอร์ได้รับข้อมูลที่ไม่ถูกต้อง
user907860

ใช่ฉันเข้าใจว่าคุณหมายถึงอะไร แต่สิ่งที่ฉันกำลังพูดคือผู้ใช้กี่เปอร์เซ็นต์ที่เห็นสิ่งนี้ ปัญหานี้เป็นปัญหาในเบราว์เซอร์มือถือหลัก ๆ เช่น Safari และ Chrome หรือไม่ คุณรู้ได้อย่างไรว่านี่เป็นปัญหามีลิงค์ที่คุณสามารถให้ได้หรือไม่ ฉันเชื่อคุณฉันแค่ต้องการค้นคว้าด้วยตัวเองและยังไม่เห็นอะไรที่แนะนำสิ่งนี้บางทีคุณอาจชี้ทางที่ถูกต้องให้ฉันก็ได้ เราแค่พยายามดูว่าฐานลูกค้าของเราจะไม่ได้รับประโยชน์จากสิ่งนี้หรือไม่
Philll_t

1
@Philll_t ฉันคิดว่าตัวอย่างที่ดีที่สุดสำหรับคำเตือนนี้คือช่องป้อนข้อมูลวันเดือนปีเกิด ในกรณีที่คุณต้องป้อนวันเดือนและปีด้วยตนเอง และใช่ยังมีเว็บไซต์จำนวนมากใช้รูปแบบนี้แทนเครื่องมือเลือกวันที่ที่ใช้กันทั่วไป เกี่ยวกับปัญหาในช่องป้อนวันเดือนปีเกิดคือเมื่อคุณป้อนวันหรือเดือนของคุณโดยเริ่มต้นด้วย "0" เช่น 08
Robin Carlo Catacutan

9

สิ่งนี้ควรใช้งานได้ แต่ฉันมีปัญหาเดียวกันกับโทรศัพท์ Android

<input type="number" /> <input type="tel" />

ฉันพบว่าถ้าฉันไม่รวม jquerymobile-framework ปุ่มกดจะแสดงอย่างถูกต้องบนฟิลด์สองประเภท

แต่ฉันไม่พบวิธีแก้ปัญหานั้นหากคุณจำเป็นต้องใช้ jquerymobile จริงๆ

UPDATE: ฉันพบว่าหากจัดเก็บ form-tag จากไฟล์

<div data-role="page"> 

ปุ่มกดตัวเลขไม่แสดง นี่ต้องเป็นบั๊ก ...


ขอขอบคุณที่เจาะลึกเรื่องนี้ ฉันไม่แน่ใจว่าฉันเข้าใจว่า: "if the form-tag is store out of the div [data-role = page]" ในกรณีของฉันปัญหาเกิดขึ้นกับฟอร์มที่ซ้อนกันอย่างสวยงามภายใน div [data-role = page] บางทีปัญหาคือหน้าเหล่านี้กำลังแสดงในกรณีของฉันเป็นกล่องโต้ตอบ?
Wytze

9

inputmodeตามข้อกำหนด WHATWGเป็นวิธีการเริ่มต้น

สำหรับอุปกรณ์ iOS การเพิ่มpatternอาจช่วยได้

สำหรับความเข้ากันได้แบบย้อนหลังก็ใช้typeเช่นกันเนื่องจาก Chrome ใช้สิ่งเหล่านี้ในเวอร์ชัน 66

<input
  inputmode="numeric"
  pattern="[0-9]*"
  type="number"
/>

1
ขอบคุณสำหรับคำตอบฉันกำลังมองหาdecimalและพบที่นี่developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/…
Rami Alloush

3

เบราว์เซอร์บางตัวจะส่งค่าศูนย์นำหน้าไปยังเซิร์ฟเวอร์เมื่อประเภทอินพุตเป็น "number" ดังนั้นฉันจึงใช้ jquery และ html ผสมกันเพื่อโหลดแป้นพิมพ์ตัวเลขและตรวจสอบให้แน่ใจว่าค่าถูกส่งเป็นข้อความไม่ใช่ตัวเลข:

$(document).ready(function(){
$(".numberonly").focus(function(){$(this).attr("type","number")});
$(".numberonly").blur(function(){$(this).attr("type","text")});
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" class="numberonly">


3
ซึ่งทำให้เกิดปัญหาที่น่ารำคาญบน Chrome สำหรับ Android เมื่อคุณแตะที่อินพุตแป้นพิมพ์จะไม่ปรากฏขึ้น จากนั้นคุณต้องแตะที่กล่องข้อความเป็นครั้งที่สองจากนั้นแป้นพิมพ์จะมาพร้อมกับแป้นพิมพ์ตัวเลขเท่านั้น ฉันหวังว่าเราจะมีtype="digits"ตัวเลือกเพื่อที่เราจะได้ไม่ต้องมีแฮ็กเหล่านี้ ฉันหมายความว่ามันไม่เหมือนกับเลขศูนย์นำหน้านั้นหายาก (รหัสไปรษณีย์ในสหรัฐอเมริกาเป็นตัวอย่างที่ชัดเจน)
Jaxidian

2
ฉันก็ประสบปัญหาเดียวกันเช่นกัน! การตั้งค่าฟิลด์เป็น "type = tel" เป็นวิธีที่ดีที่สุด
Ali Sheikhpour

-2

input type = number

เมื่อคุณต้องการป้อนตัวเลขคุณสามารถใช้ค่าแอตทริบิวต์ HTML5 input type = "number"

<input type="number" name="n" />

นี่คือคีย์บอร์ดที่มาพร้อมกับ iPhone 4:

ภาพหน้าจอ iPhone ของประเภทอินพุต HTML5 Android 2.2 ใช้แป้นพิมพ์นี้สำหรับ type = number:

ภาพหน้าจอ Android ของหมายเลขประเภทอินพุต HTML5


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.