Trong bài này mình sẽ giới thiệu đến các bạn một mẹo rất hay khi làm việc với Javascript, đó là sử dụng các thuộc tính của HTML để giải quyết cho yêu cầu của bài toán.

Theo lý thuyết thì mỗi thẻ HTML sẽ có một số thuộc tính nhất định, tuy nhiên tùy vào mỗi bài toán mà bạn có thể bổ sung thuộc tính nhằm giúp bài toán được giải quyết đơn giản hơn. Và sau đây mình sẽ lấy một ví dụ đơn giản để bạn hiểu được cách vận dụng thủ thuật này vào bài toán riêng nhé.

Giả sử mình cần viết chương trình như sau: Hãy cho thay đổi số lượng sản phẩm, nếu số lượng nhập bé hơn 0 thì lập tức thông thông báo lỗi, đồng thời thiết lập lại giá trị ban đầu cho số lượng đó.

Mình sẽ khai báo một thẻ input có cấu trúc HTML như sau:

1
<input type="text" name="product_nums" value="20"/>

Thẻ này cho thấy số lượng ban đầu là 20. Bây giờ viết chương trình cho sự kiện onchange, mỗi khi người dùng đổi số lượng và nếu lớn hơn hoặc bằng 0 thì chấp nhận, bé hơn 0 thì loại bỏ và quay về giá trị ban đầu.

Để làm điều này ta sẽ thay đổi cấu trúc HTML một chút, đó là bổ sung thêm thuộc tính init-value như sau:

1
<input type="text" name="product_nums" init-value="20" value="20"/>

Thuộc tính init-value mặc dù không phải là của thẻ input nhưng ta có thể thêm vào để giúp lưu trữ giá trị hợp lệ cuối cùng của mỗi lần nhập. Ở đây mình gán bằng 20 chính là thiết lập ban đầu (chưa có thao tác thay đổi).

Code Javascript sẽ như sau:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
function validate(obj){
    var value = parseInt(obj.value);
     
    // Nếu nhập giá trị bé hơn 0
    // thì thông báo lỗi và backup lại giá trị ban đầu
    if (value < 0){
        var init_value = obj.getAttribute('init-value');
        obj.value = init_value;
    }
    else {
        // Ngược lại nhập đúng thì
        // Cập nhật giá trị backup
        obj.setAttribute('init-value', value);    }
}

Và đây là toàn bộ code:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<!DOCTYPE html>
<html>
    <head>
        <title>Học javascript tại freetuts.net</title>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <script>
            function validate(obj){
                var value = parseInt(obj.value);
 
                // Nếu nhập giá trị bé hơn 0
                // thì thông báo lỗi và backup lại giá trị ban đầu
                if (value < 0){
                    var init_value = obj.getAttribute('init-value');
                    obj.value = init_value;
                }
                else {
                    // Ngược lại nhập đúng thì
                    // Cập nhật giá trị backup
                    obj.setAttribute('init-value', value);
                }
            }
        </script>
    </head>
    <body style="margin: 50px;">
        <input type="text" onchange="validate(this)" name="product_nums" init-value="20" value="20"/>
    </body>
</html>

Trên là mình lấy một ví dụ đơn giản để bạn hiểu được vấn đề cốt lõi của bài toán, đó chính là tự ý khai báo các thuộc tính HTML để giúp chương trình Javascript ngắn gọn hơn