javascript - 如何更改输入卡号的格式?

标签 javascript jquery html css

我有这个样本:

link

代码 HTML:

<input type="text" name="card_number" id="card_number" class="disbaled_cc required-input valid" maxlength="16" placeholder="xxxx-xxxx-xxxx-xxxx">

代码 JS:

function cardFormat(){
    var format_card = $(this).val().replace(/(\d{4})(\d{4})(\d{4})(\d{4})/, "$1-$2-$3-$4");
    if ($(this).val() == '' || $(this).val().match(format_card) || $(this).val().length == 0) {
        console.log("invalid");
    }else{
        console.log("valid");
    }
}

$("#card_number").on('blur change', function () {
        cardFormat();
    });

我想按照以下格式安排用户输入的内容

例如,如果用户键入 so 以恢复下一个表单:

1234567891091234 ---> 1234-5678-9109-1234

如果用户存在并写出正确的形式,就保持这种状态

1234-5678-9109-1234 ---> 1234-5678-9109-1234

在这种情况下,19 个字符(卡号最多应有 16 个)。 我们如何解决这个问题?

如果您有什么不明白的地方,请告诉我,我会回来提供更多信息。

你能告诉我我的功能有什么问题吗?

提前致谢!

最佳答案

问题是 $(this) 这不是您认为的元素,即 window 并且您没有分配新值。

更改为:

function cardFormat() {
  if ($(this).val().length > 4 && $(this).val().indexOf('-') === -1) {
    var format_card = $(this).val().replace(/(\d{4})(\d{4})(\d{4})(\d{4})/, "$1-$2-$3-$4");
    $(this).attr('maxlength', 16);
    $(this).val(format_card);
    if ($(this).val() == '' ||
      $(this).val().match(format_card) ||
      $(this).val().length == 0) {
      console.log("invalid");
    } else {
      console.log("valid");
    }
  }else{
    $(this).attr('maxlength', 19);
  }
}

$("#card_number").on('input blur', cardFormat); //<--use the function as a callback.
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" name="card_number" id="card_number" class="disbaled_cc required-input valid" maxlength="16" placeholder="xxxx-xxxx-xxxx-xxxx">


另一种方法是在函数中传递元素:

function cardFormat($el) { // <---get the element here $el is referring to $(this)
  if ($el.val().length > 4 && $el.val().indexOf('-') === -1) {
    var format_card = $el.val().replace(/(\d{4})(\d{4})(\d{4})(\d{4})/, "$1-$2-$3-$4");
    $el.attr('maxlength', 16);
    $el.val(format_card);
    if ($el.val() == '' ||
      $el.val().match(format_card) ||
      $el.val().length == 0) {
      console.log("invalid");
    } else {
      console.log("valid");
    }
  } else {
    $el.attr('maxlength', 19);
  }
}

$("#card_number").on('blur change', function() {
  cardFormat($(this)); // <----pass the element here
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" name="card_number" id="card_number" class="disbaled_cc required-input valid" maxlength="16" placeholder="xxxx-xxxx-xxxx-xxxx">

关于javascript - 如何更改输入卡号的格式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35500175/

相关文章:

javascript - jquery $.ajax 强制 POST

javascript - JQuery 不同的对话框不区分

html - 如何在 CSS 中将我的提交按钮居中?

javascript - 导航后窗口状态是否持续存在?

javascript - 停止部分的水平滚动并开始页面垂直滚动

javascript - 来自 mongodb 的 Angular GET 返回 [object Object]

javascript - Material ui <Icon> 无法正确渲染

javascript - div重叠另一个虽然div的位置是相对的

javascript - Masonry broken(可能是经典)

css - div 对齐创建新行