Tổng kết dự án quản lý khách hàng (Frontend)

Phân biệt thuộc tính Readonly và Disabled

Cả hai thuộc tính đều ngăn người dùng chỉnh sửa nội dung trong form, nhưng phạm vi áp dụng khác nhau. Readonly chỉ có hiệu lực với input[type="text"], input[type="password"]textarea, trong khi Disabled hoạt động trên mọi phần tử form như select, radio, checkbox, button.

Thuộc tính lastIndex của biểu thức chính quy trong JavaScript

lastIndex là vị trí bắt đầu tìm kiếm tiếp theo (tính từ 0) khi sử dụng cờ toàn cục g. Mỗi lần gọi test() hoặc exec(), giá trị này thay đổi. Nếu không đặt lại, kết quả có thể bị xen kẽ đúng/sai.

var pattern = /dog/g, text = "dog";
var btn = document.getElementById("checkBtn");
btn.addEventListener("click", function() {
  console.log(pattern.test(text)); // true, false, true, ...
  pattern.lastIndex = 0;           // reset
});

Biểu thức khớp ký tự tiếng Trung: /[\u4e00-\u9fa5]/

Căn giữa theo chiều dọc với chiều cao không cố định

Có thể sử dụng Flexbox, CSS Grid hoặc kết hợp transform. Ví dụ đơn giản:

.container {
  display: flex;
  align-items: center;
  justify-content: center;
  height: 100vh;
}

Căn chỉnh checkbox với nhãn văn bản

input[type="checkbox"] {
  vertical-align: middle;
  margin-top: 0;
  margin-right: 4px;
}
label {
  font-family: Tahoma;
}

Chọn tất cả checkbox bằng jQuery

$("#selectAll").on("change", function() {
  $("input[type='checkbox']").prop("checked", this.checked);
});

Chuyển đổi giữa các hệ cơ số

function convertBase(value, fromBase, toBase) {
  return parseInt(value.toString(), fromBase).toString(toBase);
}
// Ví dụ: convertBase('ff', 16, 2) → '11111111'

Chuyển đổi màu hex sang rgb

function hexToRgb(hex) {
  hex = hex.replace('#', '');
  if (hex.length === 3) {
    hex = hex.split('').map(c => c + c).join('');
  }
  var r = parseInt(hex.substring(0,2), 16);
  var g = parseInt(hex.substring(2,4), 16);
  var b = parseInt(hex.substring(4,6), 16);
  return 'rgb(' + r + ',' + g + ',' + b + ')';
}

Xác thực biểu mẫu (form validation)

$("input[data-required]").on("blur", function() {
  var $field = $(this);
  var $parent = $field.parent();
  $parent.find(".validation-msg").remove();

  if ($field.hasClass("fullname")) {
    if ($field.val().length === 0 || $field.val().length > 6) {
      $parent.append("<span class='validation-msg error'>Tên tối đa 6 ký tự, không được để trống</span>");
    } else if (/\d|\s/.test($field.val())) {
      $parent.append("<span class='validation-msg error'>Tên không chứa số hoặc khoảng trắng</span>");
    } else {
      $parent.append("<span class='validation-msg success'>Hợp lệ</span>");
    }
  }

  if ($field.hasClass("phone")) {
    if (!/^\d{7,12}$/.test($field.val())) {
      $parent.append("<span class='validation-msg error'>Số điện thoại từ 7 đến 12 chữ số</span>");
    } else {
      $parent.append("<span class='validation-msg success'>Hợp lệ</span>");
    }
  }
});

$("#saveBtn").on("click", function() {
  $("input[data-required]").trigger("blur");
  if ($(".validation-msg.error").length > 0) {
    return false;
  }
  alert("Lưu thành công");
});

Flexbox tương thích nhiều trình duyệt

.flex {
  display: -webkit-box;
  display: -webkit-flex;
  display: -ms-flexbox;
  display: flex;
}
.flex-column {
  -webkit-box-orient: vertical;
  -webkit-flex-direction: column;
  -ms-flex-direction: column;
  flex-direction: column;
}
.flex-1 {
  -webkit-box-flex: 1;
  -webkit-flex: 1;
  -ms-flex: 1;
  flex: 1;
}
.flex-middle {
  -webkit-box-align: center;
  -webkit-align-items: center;
  -ms-flex-align: center;
  align-items: center;
}
.flex-center {
  -webkit-box-pack: center;
  -webkit-justify-content: center;
  -ms-flex-pack: center;
  justify-content: center;
}
.flex-between {
  -webkit-box-pack: justify;
  -webkit-justify-content: space-between;
  -ms-flex-pack: justify;
  justify-content: space-between;
}

Áp dụng:

<div class="flex flex-between">
  <div class="flex-1">Mục A</div>
  <div class="flex-1">Mục B</div>
  <div class="flex-1">Mục C</div>
</div>

Ngăn chặn kéo thả mặc định của trình duyệt

document.addEventListener('dragstart', function(e) {
  e.preventDefault();
});

Thẻ: JavaScript regex Form Validation flexbox css

Đăng vào ngày 18 tháng 9 lúc 06:16