【发布时间】:2018-01-02 17:12:12
【问题描述】:
我正在尝试创建一个漂亮的信用卡号输入字段,该字段会在用户输入时自动格式化信用卡号。这就是我所拥有的:
# Whenever the credit card input changes, update its value.
$(".credit-card-number").on "input", ->
# retrieve the credit card number
creditCardNumber = $(this).val()
# remove everything that's not a number
creditCardNumber = creditCardNumber.replace(/[^\d]+/g, "")
# ensure the value isn't more than 16 characters long
creditCardNumber = creditCardNumber[0..15]
# break apart the value every four numbers
creditCardNumber = creditCardNumber.match(/.{1,4}/g)
# insert spaces in the value when the value isn't null
creditCardNumber = if creditCardNumber? then creditCardNumber.join(" ") else ""
# set the value
$(this).val(creditCardNumber)
这在以下 HTML 上完美运行:
<input class="credit-card-number" id="credit_card_number" name="credit_card_number" placeholder="Credit card number" type="text">
但是,如果我将输入的类型设置为 number,则每当我更新值并且值包含空格时,Chrome 都会将值更改为空字符串。有什么想法吗?
【问题讨论】:
-
是的,如果您希望值中有空格,请不要使用
number输入。 -
为什么需要将类型设置为
number而不是text? -
您可以使用正则表达式检查您的号码格式。由于本地化问题,我个人从不信任浏览器关于数字、小数的问题
-
之所以要使用数字输入是因为输入中包含的值是一个数字。这是要使用的语义正确的输入。此外,在移动设备上,它会显示数字键盘而不是全键盘。
标签: javascript jquery coffeescript