Javascriptでフォームの省略入力コマンド

テーブル的なフォームでデータを大量に入力する必要が有る場合、時々前の行と同じだったり連番だったりして、一々入力するのが面倒だったので作った。vim使いなので何かvimライク。

// 入力値省略コマンド作成
function editor_cmd(elem) {
  /*
  初期化は省略
  */
  $(inputs).keyup(function(){
    // (focusとblurで代入したほうが良いと思う)
    prev = $(this).closest("tr.tracks").prev(); // 前の行
    next = $(this).closest("tr.tracks").next(); // 次の行
    val = $(this).val();
    // キーアップイベント時にcaseに当てはまる値なら値を置き換える
    switch (val) {                                                                             
      case ":=p": // 前の行と同じ
        if ($(prev).size()) {
          $(this).val($(prev).find("input.t1").val());
        }
        break;
      case ":=n": // 次の行と同じ
        if ($(next).size()) {
          $(this).val($(next).find("input.t1").val());
        }
        break;
      case ":+p": // 前の行の数字+1
        if ($(prev).size()) {
          $(this).val(
            val_incdec($(prev).find("input.t1").val(), true)
          );
        }
        break;
      case ":-n": // 次の行の数字を-1
        if ($(next).size()) {
          $(this).val(
            val_incdec($(next).find("input.t1").val(), false)
          );
        }
        break;
    }
  });
}

// 文字列中の数字をインクリメント, デクリメント
// 第二引数がtrueならインクリメント
function val_incdec(val, inc) {
  var len, num;

  val = val.replace(/\d+/, function(match){
    len = String(match).length;
    if (inc) {
      num = Number(match) + 1;
    }
    else {
      num = Number(match) - 1;
    }
    num = String(num);
    while (num.length < len) {
      num = '0' + num;
    } 
    return num;
  });
  return val;
}

コメントを残す