0

我正在尝试创建一个漂亮的信用卡号输入字段,该字段会在用户输入时自动格式化信用卡号。这就是我所拥有的:

# 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 都会将值更改为空字符串。有任何想法吗?

4

2 回答 2

3

您可以做的另一件事是使用<input type="tel" />而不是number. 如果您只想输入数字,我更喜欢使用它来获取移动设备上的数字键盘。

信用卡号的格式将适用于tel.

于 2013-09-20T12:10:16.083 回答
2

废掉我之前的回答。

您不能拥有该空间的原因是因为 jQuery 正在对您尝试设置的值执行排序验证。数字中不允许有空格,因此它正在清除值。当你输入一个字母时会发生完全相同的事情。

没有什么可以阻止您(至少在 Chrome 中)在<input type="number">字段中输入字母。如果您提交表单,它只是无效和 AFAIK,该字段将包含一个空值(尚未对此进行测试)。

于 2013-07-03T06:52:28.333 回答