我正在尝试在用户在文本字段中键入内容时自动格式化hh:mm。最初是00:00,当用户输入前两个字符时,它应该填充分钟部分;键入第三和第四个字符时,它应该自动填充小时部分。我创建了一个自定义脚本,但似乎有一些错误。有人可以帮我解决这个问题吗?或者,如果有一些Jquery库,请建议我。我也尝试了输入掩码。但这没有我的要求。还需要光标应从右侧开始。
我的HTML如下



var num_order = "";
var last_input = "";
var length = 0;

var result_str = "00:00";

$('#price').bind('keydown', function(evt) {
  //alert(String.fromCharCode(evt.keyCode));
  length = num_order.length;

  if (length < 4) {
    if (evt.keyCode == 8) {
      num_order = num_order.substring(0, num_order.length - 1);
    } else {
      last_input = String.fromCharCode(evt.keyCode);

      if (last_input > 0) {
        num_order = num_order + last_input;
        //alert(num_order);
      } else {

      }
    }
  } else {
    if (evt.keyCode == 8) {
      num_order = num_order.substring(0, num_order.length - 1);
    }
  }
  //alert(num_order);
  var result = update_input(num_order);
  //$("#price").val("");
  $("#price").val(result);
});

var result = update_input(num_order);
//$("#price").val("");
$("#price").val(result);

function update_input(str) {
  length = str.length;
  if (length == 0) {
    result_str = "00:00";
  } else if (length == 1) {
    //alert(str);
    result_str = "00:0" + str;
    //alert(result_str);
  } else if (length == 2) {
    result_str = "00:" + str;
  } else if (length == 3) {
    var first2 = str.substring(0, 2);
    var last1 = str.substring(2, 3);
    result_str = "0" + last1 + ":" + first2;
  } else if (length == 4) {
    var first2 = str.substring(0, 2);
    var last2 = str.substring(2, 4);
    result_str = last2 + ":" + first2;
  }

  //$("#price").val("");
  //$("#price").val(result_str);
  return result_str;
}

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>

<input type="text" id="price" value="00:00" />

最佳答案

从验证截止开始,下面的示例显示了如何保持4位数字,首先是keydown并不是处理此数字的最佳位置

[编辑]但是,这可能会使您回到正轨(或可能不会回到正轨),但这不太可能成为您的最终解决方案,因为键控和键控之间存在故障,看起来并不好



$("#price").val('00:00'); // init

$('#price').bind('keyup',function(evt){
  let last_input= String.fromCharCode(evt.keyCode);
  console.log('new char: ' + last_input);
  let str = $('#price').val();
  console.log('before: ' + str); // char was already added
  str = str.replace(/:/, ''); // drop the colon
  console.log('without colon: ' + str);
  //str += last_input;
  if (str.length < 4) {
    str = '0000' + str; // fill zeros on front (cut excess below)
  }
  if (str.length > 4) {
    str = str.substring(str.length - 4, str.length); // drop front
  }
  console.log('about to insert colon: ' + str);
  str = str.substring(0, 2) + ':' + str.substring(2, 4);
  console.log('after: ' + str);
  $("#price").val(str);
});

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>

<input type="text" id="price" value="00:00" />

关于javascript - 在文本字段中键入内容时,会自动从右向左格式化hh:mm,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40418100/

10-12 15:08