Showing posts with label javascript. Show all posts
Showing posts with label javascript. Show all posts

Friday, January 23, 2015

Câu lệnh trong JavaScript

Trong HTML, câu lệnh JavaScript được thực thi bởi trình duyệt web.

Câu lệnh JavaScript

Câu lệnh dưới đây nói cho trình duyệt hãy ghi dòng "Blog Mạng Lưới Toàn Cầu" vào phần tử HTML có id="website"

Ví dụ:

document.getElementById("website").innerHTML = "Blog Mạng Lưới Toàn Cầu";

Chương trình JavaScript

Hầu hết các chương trình JavaScript bao gồm nhiều câu lệnh JavaScript.

Các câu lệnh JavaScript được thực hiện thứ tự từng dòng một như trong code mà nó được viết ra.

Trong ví dụ bên dưới, x, y và z được nhận giá trị và cuối cùng giá trị của z được đưa ra màn hình:

Ví dụ:

var x = 7;
var y = 9;
var z = x + y;
document.getElementById("giatri").innerHTML = z;

Dấu chấm phẩy ;

Dấu chấm phẩy dùng để ngăn cách các câu lệnh trong JavaScript.

Thêm dấu chấm phẩy vào cuối mỗi câu lệnh cần thực thi:

a = 5;
b = 6;
c = a + b;


Khi được ngăn cách bằng dấu chấm phẩy, nhiều câu lệnh trên một dòng là được phép, ví dụ:

a = 5; b = 6; c = a + b;

Trên web, bạn có thể nhìn thấy các ví dụ không có dấu chấm phẩy. Câu lệnh cuối cùng không bắt buộc phải có dấu chấm phẩy, nhưng được khuyến cáo là nên dùng.

Các ký tự trắng (khoảng trắng) trong JavaScript

JavaScript bỏ qua các khoảng trắng. Bạn có thể thêm khoảng trắng để giúp các đoạn code dễ đọc hơn.

Những dòng dưới đây có ý nghĩa như nhau:

var person = "Đức Anh";
var person="Đức Anh";

Ngắt dòng và độ dài dòng trong JavaScript

Để được đọc dễ dàng hơn, các lập trình viên thường tránh viết nhiều hơn 80 ký tự trên một dòng.

Nếu một câu lệnh trong JavaScript không vừa đủ trong một dòng, cách hay hơn là bẻ gãy nó, sau một toán tử:

Ví dụ:

document.getElementById("website").innerHTML =
"Blog Mạng Lưới Toàn Cầu.";

Khối lệnh trong JavaScript

Các câu lệnh trong JavaScript có thể được nhóm lại với nhau thành khối bên trong dấu ngoặc nhọn { ... }

Mục đích của khối code dùng để xác định các câu lệnh được thực thi cùng lúc.

Một trong những nơi bạn có thể tìm thấy các câu lệnh được nhóm với nhau thành khối đó là hàm của JavaScript:

Ví dụ:

function myFunction() {
document.getElementById("website").innerHTML = "Blog Mạng Lưới Toàn Cầu.";
document.getElementById("hoten").innerHTML = "Nguyễn Đức Anh";
}

Về sau học các ngôn ngữ lập trình phía server, bạn sẽ thấy cấu trúc này rất giống hàm của PHP.

Các từ khóa trong JavaScript

Các câu lệnh trong JavaScript thường bắt đầu bằng từ khóa để xác định hành động nào được thực thi.

Dưới đây là một số các từ khóa chúng ta sẽ được tìm hiểu thêm sau này: break, continue, debugger, do...while, for, function, if ... else, return, switch...

Các từ khóa này sẽ không được phép sử dụng làm tên biến nữa (như kiểu phạm húy í!)

Cú pháp trong JavaScript

Cú pháp trong JavaScript là các quy tắc, cách thức làm thế nào các chương trình JavaScript được xây dựng.

Ngôn ngữ Javascript là gì?

Một ngôn ngữ máy tính là danh sách các hướng dẫn được thực thi bởi máy tính.

Trong một ngôn ngữ lập trình, những "phần hướng dẫn" được gọi là câu lệnh.

Javascript là một ngôn ngữ lập trình.

Các câu lệnh trong Javascript được ngăn cách với nhau bằng dấu chấm phẩy.

Ví dụ:

var x = 9;
var y = 3;
var z = x - y;


Trong HTML, JavaScript có thể được xử lý, thực thi bằng trình duyệt web (FireFox, Google Chorme, IE,..)

Câu lệnh trong JavaScript

Các câu lệnh JavaScript được tạo thành từ: Giá trị, Toán tử, Biểu thức, Từ khóa và Chú thích.

Giá trị trong JavaScript

Cú pháp của JavaScript định nghĩa 2 loại giá trị: Giá trị cố định và giá trị thay đổi. Giá trị cố định được gọi là hằng, giá trị thay đổi được gọi là biến.

Hằng trong JavaScript

Những luật quan trọng nhất khi viết các giá trị cố định:

Số được viết với dấu thập phân hoặc không có dấu thập phân.

10.50

1001


Chuỗi là văn bản, được viết trong dấu nháy kép hoặc dấu nháy đơn:

"Đức Anh Plus"

'Duc Anh Plus'

Biểu thức có thể là đại diện cho giá trị cố định:

5 + 6

5 * 10

Biến trong JavaScript

Trong ngôn ngữ máy tính, biến được sử dụng để lưu trữ dữ liệu.

Javascript sử dụng các biến từ khóa để định nghĩa các giá trị thay đổi.

Ký hiệu bằng được sử dụng để gán giá trị vào biến.

Trong ví dụ bên dưới, x là một biến. Sau đó chúng ta gán cho nó giá trị là Blog Mạng Lưới Toàn Cầu.

var x;

x = "Blog Mạng Lưới Toàn Cầu";

Toán tử trong JavaScript

JavaScript sử dụng toán tử gán ( = ) để gán gí trị cho biến:

var x = 7;
var y = 9;



JavaScript sử dụng các toán tử số học ( + - * / ) để tính toán các giá trị:

((7 + 9) * 3) / 6

Từ khóa trong JavaScript

Từ khóa trong JavaScript được dùng để xác định các hành động được thực hiện.

Ví dụ từ khóa var nói cho trình duyệt biết cần tạo một biến mới:

var x = 5 ;
var y = x + 3;

Chú thích trong JavaScript

Không phải tất cả các câu lệnh JavaScript đều được thực thi.

Code đứng sau 2 gạch xổ // hoặc nằm giữa /* và */ được xác định là comment.

Chú thích sẽ bị bỏ qua và không được thực thi:

var x = 7; // Câu lệnh này sẽ được thực thi

// var x = 6; Câu lệnh này không được thực thi

JavaScript là ngôn ngữ nhạy cảm với cách VIẾT HOA hay viết thường

Do vậy hai biến lastName và lastname là hai biến hoàn toàn khác nhau.

lastName = "Nguyễn";
lastname = "Trần";


Javascript sẽ không chuyển đổi cách viết VAR hoặc Var thành từ khóa var.

Thông thường, trong JavaScript, cách viết thường_Hoa dành cho tên biến rất phổ biến. Bạn sẽ thấy cách viết dưới dạng lastName được ưa dùng hơn lastname.

Monday, October 21, 2013

Code đơn giản Zoom ảnh bằng CSS3

Hạ Mến Zoom

Zoom ảnh có nhiều cách, trong đó chủ yếu dựa vào CSS3 hoặc Jquery và đôi khi là cả hai. Nếu xài Jquery bạn có các hiệu ứng zoom rất đẹp (thí dụ như Cloud Zoom), xài CSS3 thì hiệu ứng tuy không bằng nhưng bù lại code rất đơn giản - miễn phí và không đòi hỏi tải thư viện khá nặng có thể làm chậm đi tốc độ lướt web.

Chúng ta sẽ áp dụng 2 thuộc tính của CSS3:
  • transform: scale(x,y)  -  theo đó x, y là các giá trị ta muốn phóng lên theo trục x và y, thường thì ta để x = y để bức ảnh được phóng to mà vẫn giữ nguyên tỉ lệ. Chẳng hạn transform: scale(2,2) sẽ làm bức ảnh phóng to lên 2 lần
  • transition: all 1s ease  -  theo đó chúng ta sẽ làm bức ảnh được phóng to dần dần trong khoảng thời gian 1s chứ không bụp một cái to lên luôn (hơn Thánh Gióng!)
Và giờ là code mẫu:

img {
transition: all 1s ease;
-webkit-transition: all 1s ease;
-moz-transition: all 1s ease;
-o-transition: all 1s ease;
}

img:hover {
transform: scale(1.5,1.5);
-webkit-transform: scale(1.5,1.5);
-moz-transform: scale(1.5,1.5);
-o-transform: scale(1.5,1.5);
-ms-transform: scale(1.5,1.5);
}

Đoạn code trên có nghĩa là mọi hiệu ứng chuyển đổi sẽ diễn ra trong vòng 1s, hiệu ứng sẽ xảy ra khi hover qua ảnh và làm bức hình tăng kích thước lên 1.5 lần. Các tiền tố -webkit, -moz, -o, -ms là để phù hợp với các trình duyệt khác nhau.

Kết quả: các bạn cứ hover (di chuột qua) bức hình cô gái đầu bài thì biết :)

Sunday, October 20, 2013

Cách dùng Cloud Zoom Jquery để Phóng to Ảnh

Cloud Zoom Trial

Hiệu ứng Zoom vào chi tiết ảnh hay dùng với các trang web bán hàng. Khi đó, chúng ta có hình ảnh sản phẩm ở kích cỡ vừa phải, nhưng rõ ràng người dùng muốn mua thường thích nhìn kỹ càng hơn, lúc đó khi họ di chuột vào bức ảnh, hiệu ứng giống như kính lúp soi vào sẽ xuất hiện, cho phép thấy kích thước lớn.

Trường hợp chỉ cần phóng to đơn giản bạn dùng CSS3 để Zoom ảnh là đủ rồi. Tuy nhiên nếu muốn hiệu ứng đẹp hơn chúng ta cần xài Jquery. Plugin Cloud Zoom là ứng viên tốt đáp ứng các yêu cầu, nó tương thích với hầu hết các trình duyệt phổ biến bao gồm Chrome, FireFox, Opera, Safari, IE6+, nó cũng làm việc tốt với đa dạng các phiên bản của Jquery - phủ rộng từ version 1.4.3 cho đến 1.10.2 hay ngay cả 2.0.3

Cloud Zoom có 2 phiên bản:
  • Trial - miễn phí: Không giới hạn thời gian dùng thử - nhưng bạn chỉ được phép dùng cho các trang web phi thương mại, và trên ảnh sẽ có dấu ấn riêng nói rằng bạn đang dùng phiên bản miễn phí (kiểu như watermark)
  • Trả phí: Giá vào khoảng 25 Đô - Bạn được dùng trên bất cứ trang web nào - mất tiền mà :) Và được loại bỏ hoàn toàn watermark.
Bạn vào liên kết này để tải Cloud Zoom và xem demo luôn, nhớ chọn bản trial rồi tải về. Cấu trúc mã của nó khá đơn giản, sau đây mình sẽ giải thích:

Chèn code vào trước thẻ đóng head

Code mẫu như thế này:

<head>
        <!-- Cho jQuery vào-->
        <script type="text/javascript" src="http://code.jquery.com/jquery-1.8.1.min.js"></script>

        <!-- Cho Cloud Zoom CSS vào -->
        <link rel="stylesheet" type="text/css" href="cloudzoom.css" />

        <!-- Cho Cloud Zoom script vào -->
        <script type="text/javascript" src="cloudzoom.js"></script>

        <!-- Gọi hàm -->
        <script type="text/javascript">
            CloudZoom.quickStart();
        </script>    
 </head>
  1. Chèn Jquery vào bằng đoạn code: <script type="text/javascript" src="http://code.jquery.com/jquery-1.8.1.min.js"></script> ở đây đang dùng phiên bản 1.8.1 - bạn có thể dùng phiên bản khác nếu muốn. Nếu thích xài thư viện trên Google thì lấy đoạn code này: <script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.1/jquery.min.js"></script>
  2. Cho CSS của Cloud Zoom vào bằng đoạn code:  <link rel="stylesheet" type="text/css" href="cloudzoom.css" /> dĩ nhiên đoạn CSS này bạn phải cho lên host của bạn rồi
  3. Cho script Cloud Zoom vào: Đây là phần chính - chính đoạn mã ở đây thực thi phóng to ảnh, bạn cũng phải up file Javascript này lên host trước, code chèn vào HTML: <script type="text/javascript" src="cloudzoom.js"></script> 
  4. Lời gọi hàm: <script type="text/javascript" CloudZoom.quickStart() </script>
  5. Ngoài lề một chút, có thể có bạn muốn hỏi, tại sao ở bước 1 không up Jquery lên host mà lại lấy link từ Google hoặc jquery.com - câu trả lời là để nó giảm tải host cho bạn thôi. Bạn tự up lên host thì cũng không sao cả.

Chèn Code ở phần Body 

<img class = "cloudzoom" src = "images/small/image1.jpg" data-cloudzoom = "zoomImage: 'images/large/image1.jpg'" />

Bạn sẽ phải chuẩn bị 2 bức ảnh:
  • Bức ảnh nhỏ: cho vào thư mục small bên trong thư mục images. Bức ảnh nhỏ chính là bức cần Zoom - phóng to. Đường dẫn của ảnh nhỏ được cho vào sau src
  • Bức ảnh lớn: cho vào thư mục large bên trong thư mục images. Bức ảnh lớn thì giống y bức nhỏ chỉ khác là nó có kích thước to hơn thôi - ảnh lớn sẽ được lấy ra khi bạn zoom vào ảnh nhỏ. Đường dẫn của ảnh lớn được cho vào sau zoomImage
  • Nhớ đầy đủ các dấu má như " và ', vì thiếu thì không lên được.
P/S: Ngoài Cloud Zoom bạn có thể thích Jet Zoom cả 2 đều dùng để phóng to ảnh (cùng hãng sản xuất luôn) nhưng hiệu ứng có khác nhau đôi chút.

Saturday, October 19, 2013

Tạo Form đăng ký bằng Javascript và thẻ input


Họ:
Tên:
Email:
Số Điện Thoại:
Số Lượng Mua:
Ngày Nhận Hàng:
Thanh Toán: Chuyển Khoản Trực Tiếp Khi Giao Hàng

Làm form bằng HTML và chỉnh sửa lại giao diện cho đẹp với CSS không khó, bạn chỉ cần nhớ mấy cái input type là OK. Vấn đề nằm ở Validate, tức là chuẩn hóa dữ liệu nhập vào và một số yêu cầu khác nữa. HTML5 làm form cũng rất tốt, nhưng có hạn chế là chưa được hỗ trợ rộng rãi và thống nhất giữa các trình duyệt, do vậy chúng ta vẫn phải cậy nhờ khá nhiều vào Javascript. Về sau bạn sẽ biết ngoài việc bắt lỗi dữ liệu tại máy khách thì chúng ta còn phải kiểm tra dữ liệu một lần nữa tại Server cho chắc ăn bằng một ngôn ngữ lập trình web kiểu như PHP hoặc ASP.Net...Nhưng đấy là về sau! Hiện tại chúng ta chỉ quan tâm tới Javascript thôi nhé.

Có vẻ chém gió hơi nhiều, giờ sẽ vào đề ngay. Chẳng hạn tôi có Form như đầu bài. Chúng ta phải bắt lỗi trong các trường hợp sau:
  • Người dùng không nhập dữ liệu
  • Người dùng không nhập đúng chuẩn email dạng aaa@bbb.ccc
  • Người dùng nhập chữ vào Số điện thoại hoặc nhập hơn 11 số
  • Người dùng nhập chữ vào Số lượng mua, hoặc con số nhỏ hơn hoặc bằng 0, hoặc lớn hơn hoặc bằng 100
  • Ngày nhận hàng không hợp chuẩn
  • Người dùng không chọn bất cứ hình thức thanh toán nào
Thực tế là tôi đã viết code Javascript cho Form trên rồi, giờ bạn nhấn nút Đăng Ký Mua là biết liền, và thử xem nó có bắt lỗi đúng như yêu cầu không. Code mẫu:
<script type="text/javascript">
// JavaScript Document
    function validateForm() {
        //Họ phải được điền
        var ho = document.forms["myForm"]["ho"].value;
        if (ho == "") {
            alert("Họ không được để trống");
            return false;
        }
        //Tên phải được điền
        var ten = document.forms["myForm"]["ten"].value;
        if (ten == "") {
            alert("Tên không được để trống");
            return false;
        }
        //Email phải được điền chính xác
        var email=document.forms["myForm"]["email"].value;
        var aCong=email.indexOf("@");
        var dauCham = email.lastIndexOf(".");
        if (email == "") {
            alert("Email không được để trống");
            return false;
        }
        else if ((aCong<1) || (dauCham<aCong+2) || (dauCham+2>email.length)) {
              alert("Email bạn điền không chính xác");
              return false;
          }
          //Nhập số điện thoại
          var dienThoai = document.forms["myForm"]["dienThoai"].value;
          var kiemTraDT = isNaN(dienThoai);
          if (dienThoai == "") {
              alert("Điện thoại không được để trống");
              return false;
          }
          if (kiemTraDT == true) {
              alert("Điện thoại phải để ở định dạng số");
              return false;
          }
          //Nhập số lượng muốn mua
          var soLuong = document.forms["myForm"]["soLuong"].value;
          var kiemTraSL = isNaN(soLuong);
          if ((soLuong == "") || (soLuong <= 0)) {
              alert("Số lượng không được để trống và phải lớn hơn 0");
              return false;
          }
          if (soLuong > 100) {
              alert("Số lượng mua không được lớn hơn 100");
              return false;
          }
          if (kiemTraSL == true) {
              alert("Số lượng mua phải để ở định dạng số");
              return false;
          }
          //Chọn ngày nhận hàng
   var nm = document.forms["myForm"]["ngaymua"].value;
   if (nm == "") {
    alert("Ngày không được để trống");
    return false;
    }
    //Chọn kiểu thanh toán
          var ck = document.getElementById("ck");
          var tt = document.getElementById("tt");
    if ((ck.checked == false) && (tt.checked == false)) {
     alert("Bạn phải chọn một kiểu thanh toán");
     return false;
     }
}
</script>

<br />
<form action="#" method="post" name="myForm" onsubmit="return validateForm()">
<table bgcolor="#DDDDDD" id="formdangky" style="width: 450px;">
<tbody>
<tr>
    <td class="tenhang" width="118">Họ:</td>
    <td width="320"><input name="ho" type="text" /></td>
  </tr>
<tr>
    <td class="tenhang">Tên:</td>
    <td><input name="ten" type="text" /></td>
  </tr>
<tr>
    <td class="tenhang">Email:</td>
    <td><input name="email" type="text" /></td>
  </tr>
<tr>
    <td class="tenhang">Số Điện Thoại:</td>
    <td><input maxlength="11/" name="dienThoai" type="text" /></td>
  </tr>
<tr>
    <td class="tenhang">Số Lượng Mua:</td>
    <td><input name="soLuong" type="text" /></td>
  </tr>
<tr>
    <td class="tenhang">Ngày Nhận Hàng:</td>
    <td><input id="datepicker" name="ngaymua" type="text" /></td>
  </tr>
<tr>
    <td class="tenhang">Thanh Toán:</td>
    <td><input id="ck" name="thanhToan" type="radio" value="chuyenKhoan" /> Chuyển Khoản
        <input id="tt" name="thanhToan" type="radio" value="trucTiep" /> Trực Tiếp Khi Giao Hàng
    </td>
  </tr>
<tr>
    <td><input name="Submit" type="submit" value="Đăng Ký Mua" /></td>
    <td><input name="Reset" type="reset" value="Xóa" /></td>
  </tr>
</tbody></table>
</form>
Bây giờ tôi sẽ giải thích code.

Thẻ mở Form:

<form name="myForm" action="#" onsubmit="return validateForm()" method="post">

2 cái action="#" và method="post" được dùng cho việc gửi dữ liệu lên máy chủ server nên hiện bạn không cần phải quan tâm, chúng ta chỉ cần để ý đến tên của Form ở thuộc tính name="myForm" và nơi xử lý dữ liệu qua onsubmit="return validateForm()"

validateForm() chính là tên hàm mà trong đó ta xây dựng code Javascript để bắt lỗi. Ta để onsubmit có nghĩa là, khi người dùng nhấn nút submit thì dữ liệu được chuyển đến hàm validateForm()

Thẻ input

Một thẻ input mẫu trong bài trên có dạng như này: <input name="ten" type="text" />

Tôi sử dụng type là text, 6 trường đầu tiên tôi sử dụng type này, trường Thanh toán là type radio, nút Đăng Ký Mua là type submit, nút Xóa là type reset.

Điều quan trọng trong thẻ input chính là name của nó. Chính thông qua name của Form và của Input mà Javascript lấy được dữ liệu nhập vào.

Lấy dữ liệu từ input

Đoạn code mẫu để lấy dữ liệu từ thẻ input: var ten = document.forms["myForm"]["ten"].value;

Như đoạn code trên có nghĩa là bạn lấy giá trị của thẻ input có tên là "ten" trong Form có tên là "myForm" và gán giá trị lấy được này vào biến var ten

Tương tự cho email: var email=document.forms["myForm"]["email"].value;

Không được bỏ trống dữ liệu

var ten = document.forms["myForm"]["ten"].value;
if (ten == "") {
alert("Tên không được để trống");
return false;

}

Theo đó, sau khi lấy được dữ liệu từ thẻ input và gán vào biên ten, chương trình dùng hàm if để kiểm tra ten có rỗng hay không - if(ten==""). Nếu thỏa mãn điều kiện rỗng sẽ có hộp thông báo "Tên không được để trống" và ta dùng hàm alert để điều khiển tác vụ này, cuối cùng return false.

Kiểm tra dữ liệu nhập vào có phải là số không

var dienThoai = document.forms["myForm"]["dienThoai"].value;
var kiemTraDT = isNaN(dienThoai);
if (kiemTraDT == true) {
alert("Điện thoại phải để ở định dạng số");
return false;
}


Hàm dùng để kiểm tra số đó là isNaN - viết tắt của is Not a Number. Nếu isNaN trả về giá trị TRUE nghĩa là đó không phải là một số.

Kiểm tra Email hợp chuẩn

Có lẽ với đa số mọi người thì đây là code phức tạp nhất (với mình cũng thế). Địa chỉ email chính xác phải thỏa mãn điều kiện sau:
  • Phải có ký tự @
  • Trước @ phải có ít nhất 1 ký tự
  • Phải có ít nhất 1 dấu chấm trong email
  • Phải có ít nhất 1 ký tự đứng giữa @ và dấu chấm
  • Dấu chấm không được đứng ở vị trí cuối cùng
var email=document.forms["myForm"]["email"].value;
var aCong=email.indexOf("@");
var dauCham = email.lastIndexOf(".");

if (email == "") {
alert("Email không được để trống");
return false;
}

else if ((aCong<1) || (dauCham<aCong+2) || (dauCham+2>email.length)) {
alert("Email bạn điền không chính xác");
return false;
}

Chúng ta cần chú ý đến lệnh indexOf, nó sẽ xác định số ký tự đứng trước nó tính từ trái sang. Ví dụ, email ab@xy.com có giá trị email.indexOf("@") là 2 vì có 2 ký tự là a và b đứng trước @

email.indexOf(".") có giá trị là 5 vì có 5 ký tự đứng trước dấu . là a, b, @, x, y

Nếu không có ký tự cần tìm trong chuỗi, hàm indexOf sẽ trả về -1.

Đến đây bạn tự hỏi email.lastIndexOf(".") có ý nghĩa gì. Hết sức chú ý chữ last. Lệnh này cũng là xác định số ký tự đứng trước dấu chấm nhưng là dấu chấm cuối cùng. Chẳng hạn email xyz.com@gmail.com, thế thì dấu chấm cuối cùng là dấu chấm sau chữ gmail chứ không phải sau chữ xyz. Giờ chúng ta cùng tìm hiểu ý nghĩa code.

var aCong=email.indexOf("@");
if (aCong<1)

Chỉ có 2 trường hợp xảy ra khi aCong<1:
  • Không có @ trong địa chỉ email, lúc này email.indexOf("@") = -1
  • aCong = 0, nghĩa là không có ký tự nào đứng trước @, hay email nhập vào có dạng @klm.com - tức là không hợp chuẩn
  • Vậy là với câu lệnh trên ta đã ép dữ liệu phải có @, và trước @ phải có ký tự
Sau @ phải có ít nhất 1 ký tự sau đó mới đến dấu chấm do đó, email hợp chuẩn thì số ký tự đứng trước dấu chấm luôn lớn hơn số ký tự đứng trước @ ít nhất 2 đơn vị - tức là dauCham >= aCong + 2, ngược lại điều này thì email đó không hợp lệ, nói cách khác là: dauCham < aCong + 2

Lệnh trên chúng ta đã ép phải tồn tại dấu chấm trong email, ngoài ra nó cũng buộc giữa dấu chấm cuối cùng và email phải có ít nhất 1 ký tự.

Tiếp đến ta xem xét câu lệnh ngăn không cho dấu chấm là ký tự cuối cùng trong email.

var dauCham = email.lastIndexOf(".");
dauCham+2>email.length
  • email.length xác định số ký tự của email
  • Sau dấu chấm cuối cùng phải có ít nhất 1 ký tự do vậy nếu dauCham + 2 > email.length nghĩa là email đó không hợp chuẩn.

Friday, October 18, 2013

Cách dùng thẻ input để làm Form trong HTML5

Email:

Làm Form trong HTML5 đơn giản hơn nhiều HTML thường, lý do nằm ở chỗ bạn không cần dùng Javascript để Validate (bắt lỗi dữ liệu) các trường nữa. Tất nhiên điều này không tuyệt đối, một số cái vẫn phải dùng Javascript, nhưng gì thì gì, chơi với HTML5, code mà bạn phải gõ sẽ ít hơn nhiều lần. Hiện trình duyệt Google Chrome hỗ trợ tốt nhất các thẻ input mới, do vậy tôi khuyên bạn nên dùng anh bạn này để xem các ví dụ trong bài viết.

Tôi sẽ bắt đầu luôn với thẻ input mà bạn thường xuyên phải bắt lỗi, đó là email. Nếu HTML thường bạn sẽ phải viết code JS khá dài thì với HTML5, bạn chỉ cần ghi: <input type="email">. Giờ bạn thử gõ một đoạn không phải email chuẩn rồi nhấn Gửi xem điều gì xẩy ra. Thẻ email được hỗ trợ tốt trên đa số trình duyệt, ngoại trừ Safari.

Email:
Đoạn code mẫu cho form trên là:

<form action="#">
Email: <input name="email" type="email" />
 <input type="submit" />
</form>

Bạn cũng còn nhớ, một yêu cầu khác mà chúng ta thường phải làm với Form, đó là không cho phép người dùng bỏ trống dữ liệu. Code JS cho điều này rất đơn giản, nhưng HTML5 còn đơn giản hơn! Bạn chỉ cần thêm thuộc tính required vào, cụ thể: <input type="email" required>

Email:
Bạn để trống và nhấn nút Gửi (submit) xem sao.

Như vậy, HTML5 không chỉ thêm các thẻ mới, nó còn thêm các thuộc tính mới nữa mà required ở trên là ví dụ.

Thuộc tính mới tiếp theo cũng rất hay dùng đó là placeholder, đây là đoạn văn bản trong thẻ input để nhắc người dùng nên nhập cái gì, ví dụ dòng chữ nhạt màu "Bạn nhập họ tên vào đây" được tạo bằng placeholder:

Họ tên:
Code mẫu:

<form action="#">
Họ tên: <input name="name" placeholder="Bạn nhập họ tên vào đây" required="" type="text" />
<input type="submit" />
</form>

Sau đây là các kiểu input mới khác trong HTML5...

Thẻ color - chọn màu

Chọn màu cho bạn:
Code mẫu:

<form action="#">
  Chọn màu cho bạn: <input type="color" name="mausac"><br>
  <input type="submit">
</form>

Hiện chỉ có Chrome và Opera hỗ trợ thẻ màu.

Thẻ number - số má

Nhập giá trị từ 1 đến 10:
Code mẫu:

<form action="#">
  Nhập giá trị từ 1 đến 10: <input type="number" name="quantity" min="1" max="10">
  <input type="submit">
</form>

Với thẻ number bạn buộc phải nhập số, thẻ number bổ sung thêm các thuộc tính giá trị nhỏ nhất min, giá trị lớn nhất max. Ngoài ra còn cả thuộc tính step - bước nhảy. Hiện thẻ number chưa được hỗ trợ trên FireFox.

Thẻ day - ngày tháng năm

Ngày sinh:
Code mẫu:

<form action="#">
  Ngày sinh: <input type="date" name="ngaysinh">
  <input type="submit">
</form>

Thẻ day sẽ giúp bạn nhanh chóng lấy ngày tháng năm cụ thể và dĩ nhiên bạn cũng không cần code để validate nữa, vì với thẻ này người dùng chỉ có thể nhập ngày tháng năm vào mà thôi.

Thẻ URL - thêm địa chỉ website

Địa chỉ web:
Code mẫu:

<form action="#">
  Địa chỉ web: <input type="url" name="page"><br>
  <input type="submit">
</form>

Thẻ này đa số các trình duyệt hỗ trợ, chỉ Safari là chưa. Yêu cầu nhập địa chỉ trang web phải có cả http://

Code nhúng video trong HTML5


HTML5 cho phép chúng ta nhúng video vào trang web rồi xem trực tiếp trên trình duyệt mà không cần phải sử dụng plugin của bên thứ ba như Adobe Flash Player. Hôm nay Blog Mạng Lưới Toàn Cầu sẽ cùng bạn xem code nhúng này cụ thể như thế nào.

Code mẫu:

<video width="640" height="480" controls posster="images/poster.png">

<source src="mangluoitoancau.mp4" type="video/mp4">

<source src="mangluoitoancau.ogg" type="video/ogg">

Trình duyệt của bạn không hỗ trợ thẻ video

</video>


Giải thích code:
  • Để nhúng video chúng ta bắt đầu bằng thẻ mở <video> và kết thúc bằng thẻ đóng </video>
  • width và height quy định chiều rộng và chiều cao của video
  • controls làm xuất hiện nút Play (bật video), Pause (tạm dừng), tùy chọn toàn màn hình và nút điều khiển âm thanh.
  • Nguồn video đặt trong thẻ source, với đường dẫn cụ thể được quy định trong thuộc tính src, trình duyệt dựa vào thuộc tính type để biết định dạng của video.
  • Có 3 định dạng video được các trình duyệt hỗ trợ là: mp4, ogg và webm. Tuy nhiên không phải trình duyệt nào cũng hỗ trợ cả 3, có trình duyệt chỉ hỗ trợ 1 định dạng duy nhất.
  • Dòng cuối cùng sẽ xuất hiện trong trường hợp trình duyệt không hỗ trợ thẻ video, thí dụ IE8. Hầu hết các trình duyệt phổ biến gồm: Google Chrome, FireFox, Opera, Safari và IE9+ đều có hỗ trợ thẻ video
  • Thuộc tính poster dùng để làm ảnh nền cho video, thí dụ video ở đầu bài sử dụng poster là bức ảnh dưới đây:
Poster cho video

Các định dạng video được hỗ trợ trên trình duyệt:

Trình duyệtMP4WebMOgg
Internet ExplorerCóKhôngKhông
ChromeCóCóCó
FirefoxCó (FireFox 21+)CóCó
SafariCóKhôngKhông
OperaKhôngCóCó
Ngoài ra chúng ta có thể sử dụng Javascript để điều khiển bật, tắt, thay đổi kích thước video như ví dụ dưới đây:

Tùy chọn movie


Theo đó:
  • Trước tiên video được gán một id cụ thể, trong ví dụ này là myvideo
  • Video sẽ được lấy bằng lệnh document.getElemnetById("myvideo")
  • Sau đó video này sẽ được điều khiển thông qua các lệnh video.pause(), video.play(), video.width="xyz" , với xyz là giá trị cụ thể nào đó. Các lệnh này được lồng trong các hàm.
  • Các button tương ứng khi được nhấn sẽ gọi các hàm này lên bằng lệnh onclick, ví dụ: <button onclick="play();">Chạy</button> sẽ gọi hàm play() và chạy video này.
Code cụ thể:
<div>
<button onclick="playPause();">Play/Pause</button>
<button onclick="size250();">250</button>
<button onclick="size400();">400</button>
<button onclick="size550();">550</button>
</div>
<video id="myvideo" width="250">
      <source id="mp4" src="http://media.w3.org/2010/05/sintel/trailer.mp4" type="video/mp4"></source>
      <source id="webm" src="http://media.w3.org/2010/05/sintel/trailer.webm" type="video/webm"></source>
      <source id="ogv" src="http://media.w3.org/2010/05/sintel/trailer.ogv" type="video/ogg"></source>
</video>
<script type="text/javascript">
var video = document.getElementById("myvideo");
function playPause()
{ 
if (video.paused) 
video.play(); 
else 
video.pause(); 
} 

function size250()
{video.width = 250;} 

function size400()
{video.width = 400;}

function size550()
{video.width = 550;} 
</script>

Slideshow đơn giản với code Javascript thuần



Slideshow là yếu tố trợ giúp thẩm mỹ rất tốt cho trang web, hôm nay tôi sẽ giới thiệu với bạn code Javascript để làm Slideshow dạng đơn giản kiểu next, back. Code khá ngắn và cũng không phức tạp lắm.

Đầu tiên bạn phải chuẩn bị vài bức ảnh, bao nhiêu cái tùy bạn, trong ví dụ này tôi lấy 4 bức JPG. Tiếp theo chúng ta cho 4 anh bạn này vào thư mục images, nhớ kiếm cả 2 ảnh next và back để cho vào luôn nếu muốn đẹp còn không để 2 cái button thô thô như mình ở trên cũng được, cuối cùng tạo thư mục js để chứa file Javascript. Copy đoạn code sau cho vào file có tên slideshow.js trong thư mục js:

var anhAr = []; 
var imgIndex = 0; 
function loadAnh() { 
for (var i = 0; i < 4; i++) { 
anhAr[i] = new Image(); 
anhAr[i].src = "images"+"/"+"ss"+i+".jpg"; } } 

function next() {
if (imgIndex == 3) {
 imgIndex = -1; } 
if (imgIndex < 3) { 
imgIndex++; document.getElementById("ss").src = anhAr[imgIndex].src; } }

function back() {
if (imgIndex == 0) { 
imgIndex = 4; } 
if (imgIndex > 0) { 
imgIndex--; 
document.getElementById("ss").src = anhAr[imgIndex].src; } }

Ở trang HTML tại thẻ mở body ta gọi hàm loadAnh bằng đoạn code sau: <body onload = "loadAnh();">  Dĩ nhiên trước đó bạn phải liên kết với file slideshow.js bằng cách thêm đoạn code dưới đây vào trước thẻ đóng head: <script type="text/javascript" src="js/slideshow.js"></script>

Phần tới bạn sẽ tạo khu vực chứa slideshow trong html, nó sẽ có kiểu như này:

<div id="showanh">
      <input type="image" src="images/back.png" height="80" width="80" value="back" onclick="back();" />
      <img id="ss" src="images/ss0.jpg" />
      <input type="image" src="images/next.png" height="80" width="80" value="next" onclick="next();"/>
</div> <!-- showanh -->

Để onclick="back();" và onlick="next();" nhằm mục đích khi click vào các nút back và next, nó sẽ gọi các hàm tương ứng. Một chú ý nhỏ, 4 bức ảnh được đặt tên theo thứ tự từ ss0, ss1, ss2 và cuối cùng là ss3. Tại sao lại đặt tên như vậy thì dưới đây tôi sẽ nói sau. Giờ tới phần giải thích code Javascript.

Mảng anhAr và Hàm loadAnh

var anhAr = [];// Khởi tạo mảng anhAr
var imgIndex = 0; // Khởi tạo biến imgIndex với giá trị là 0 
function loadAnh() { 
for (var i = 0; i < 4; i++) { 
anhAr[i] = new Image(); 
anhAr[i].src = "images"+"/"+"ss"+i+".jpg"; } }

Hàm loadAnh - function loadAnh() có mục đích đưa 4 bức ảnh vào mảng anhAr, để làm điều này, ta dùng hàm for chạy từ 0 cho đến nhỏ hơn 4 (tức là 3) với bước nhảy là 1 (i++). Bạn còn nhớ tên ảnh từ ss0 đến ss3 không? Ý nghĩa tên bức ảnh là để tiện dùng trong hàm này.

anhAr[i] = new Image() dùng để khởi tạo phần tử mảng có kiểu là Ảnh (Image).
anhAr[i].src = "images"+"/"+"ss"+i+".jpg" dùng để lấy đường dẫn cho ảnh, nhìn vào đây bạn có thể thấy, ảnh nằm trong thư mục images, với tên là ssi (i từ 0 cho đến 3) và định dạng là .jpg

Vậy cả hàm loadAnh() ở trên sẽ lưu 4 bức ảnh vào mảng anhAr, ghi nhớ cả đường dẫn của những bức ảnh này nữa.

Hàm next

function next() { 
if (imgIndex == 3) { 
imgIndex = -1; } 
if (imgIndex < 3) { 
imgIndex++; 
document.getElementById("ss").src = anhAr[imgIndex].src; } }

Để nhanh chóng hiểu hàm next tôi sẽ giải thích đoạn code trọng tâm của nó là đoạn:

if (imgIndex < 3) 
{ imgIndex++; 
document.getElementById("ss").src = anhAr[imgIndex].src; }

Ở đây bạn thấy khi hàm next được gọi, nó sẽ kiểm tra giá trị của imgIndex. Bạn còn nhớ giá trị khởi tạo của imgIndex ta để là 0, và đây là giá trị của imgIndex khi ta bật trang lần đầu.

Vì 0 nhỏ hơn 3, thỏa mãn điều kiện nên, imgIndex được chỉ thị tăng lên 1 đơn vị (imgIndex++), sau đó src của id có tên là ss sẽ được thay thế bằng src của anhAr[1]

id có tên ss trong html chính là thẻ <img id="ss" src="images/ss0.jpg" /> hay nói cách khác, bằng việc nhấn nút next, đoạn code trên sẽ thay đổi thành: <img id="ss" src="images/ss1.jpg" /> Tức là bức ảnh ss0.jpg sẽ được thay thế bằng ss1.jpg

Điều gì xẩy ra khi imgIndex = 3, đây là lúc thích hợp để giải thích đoạn code đầu tiên của nút next:

if (imgIndex == 3) { imgIndex = -1; }

Điều này có nghĩa là nếu đến bức ảnh cuối cùng, hãy gán imgIndex = -1, sau đó vì -1 nhỏ hơn 3 nên imgIndex lại tăng lên 1, tức là về 0. Nói cách khác, ta sẽ được đưa về bức ảnh đầu tiên tức là ss0.jpg. Vậy mục đích của đoạn code trên giúp ta có thể next vô tận, nếu không có nó, đến thời điểm img = 3, bạn không thể next được nữa.

Về phần code back, nó cũng hoàn toàn tương tự, điểm khác biệt duy nhất là nó trái ngược với next mà thôi, mọi giải thích vẫn nguyên như cũ.

Làm SlideShow trong Blogspot

Nghe hấp dẫn đúng không, mình thử làm ngay và luôn nhé, vì dùng blogspot, cho nên đường dẫn ảnh không được đẹp như trên, nhưng không sao, chúng ta chỉ cần thay đổi code một chút là được, cụ thể chúng ta phải gán từng phần tử của mảng với địa chỉ cụ thể của ảnh như dưới đây:

var anhAr = [];
var imgIndex = 0;
anhAr[0] = new Image();
anhAr[0].src = "https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRQU3BOhO4mo_fx2j_ds8tsfZHxtLbnk2L9ZsAKddIWVHqssThvfl904lD5y0bXMcrb3YmRCJ_boN6NZOj__mIsJwu7_gRDHY2JIFw51Dle3is_gRFspZNp-_Fh79nFteydKySUMh0DQ/s1600/stock-photo-mist.jpg";

anhAr[1] = new Image();
anhAr[1].src = "https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0hLJ-as6AhuhKgF1QeG_xxrfmVR4hDUcSs2iVyPEFmBCfs56UhdbcBB14bvusR8yZ7jwIDG7ht7J_IkpPx5D4XWpKdr_iso6WQJufTEnWXpQm1mf4f6tLJb3AO_yTtzsuCZkkGsof0A/s1600/stock-photo-lanka.jpg";

anhAr[2] = new Image();
anhAr[2].src = "https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXCl-Zyz3eRdmv7rN5dYAfqEVlQ2lg5iblyFac-ThVO2Cl9lv3FPVVVQZSgGoW1Z_CSXWO483dAYrTnwDdyAlhKCXVr1UQPPSLD0z6ZgmAbl0kKLntmGfKqwQX6fcqub5GSyuKREcn7w/s1600/stock-photo-human-hand.jpg";

anhAr[3] = new Image();
anhAr[3].src = "https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhYCjVjALGuaDByqcpUPnw38bpfJcmKVNSAe7xAyDREqUKEmHKgYpu9aNB5cKoj9jnHDIFv9juWNjKGlQLPkkXySCY1WsvQ2NxACLt1oHpBX42SFRaLT0ahDF8SbsoYgiqwHlNAWtBZJg/s1600/stock-casting.jpg";

Những phần code còn lại thì giống nguyên, không cần thay đổi gì cả.

Wednesday, August 28, 2013

Biến Google Drive thành nơi lưu trữ HTML, CSS và JavaScript

Google Drive

Là một người hay nghịch web và muốn chia sẻ kiến thức với mọi người nên tôi khá đau đầu về vấn đề hosting. Đã từng sử dụng host của Việt Nam, nhưng vấn đề rất hay gặp là tình trạng truy cập chậm hoặc không thể truy cập - trong khi blog của tôi có lượng người xem khá lớn.

Tôi cũng nghĩ đến giải pháp mua host nước ngoài, nhưng hiện điều kiện chưa cho phép - thế nhưng rất mừng rỡ là tôi mới phát hiện một giải pháp hoàn toàn miễn phí, cắt hẳn những lo lắng của chúng ta về vấn đề hosting.

Đó là sử dụng Google Drive.

Có lẽ bạn bất ngờ, vâng tôi cũng bất ngờ, trước tôi chỉ nghĩ Google cho phép lưu trữ và xem trực tiếp các file phổ thông như Docs, Excel - nhưng quả thực là giờ họ đã chấp nhận HTML, CSS và cả JacaScript host trên máy chủ của họ và có thể xem trực tiếp cũng như nhúng vào trang web. Và với Google Drive bạn không phải cảm thấy bất an về vấn đề chậm hay quá tải vì hệ thống Server của Google là cực kỳ khủng.

Tiếp theo là cách làm cụ thể, đầu tiên bạn vào Google Drive tạo một thư mục với tính năng chia sẻ với tất cả mọi người...

Bước 1: Tạo thư mục rồi đặt tên cho nó

Tạo thư mục

Bước 2: Nhấn vào thư mục để một mũi tên nhỏ hiện ra - sau đó click vào mũi tên nhỏ đó

click vào mũi tên nhỏ

Bước 3: Nhấn vào Chia sẻ

Nhấn vào Chia sẻ

 Theo mặc định thư mục bạn tạo sẽ ở chế độ riêng tư:

chế độ riêng tư

Nhưng vì bạn cần chia sẻ các file trong thư mục này để ai cũng có thể xem được nên chúng ta cần thay đổi chế độ riêng tư về Public - Công khai trên web.

công khai trên web

Giờ giả dụ bạn muốn up một file HTML có nhúng cả CSS trong đó thì đầu tiên, bạn up file đó như bình thường vào thư mục MyCode ở trên (file đó theo mặc định cũng được chia sẻ cho tất cả mọi người giống thư mục chứa nó).

Tôi đã up 2 file lên thư mục MyCode:

2 file ở thư mục chia sẻ

Giờ để lấy liên kết xem trực tiếp bạn nhấn vào file đó, rồi nhấn tiếp vào chia sẻ, một khung sau hiện ra:

liên kết để chia sẻ

Bạn copy đoạn link Liên kết để chia sẻ, nó có dạng như thế này:

https://docs.google.com/file/d/0BxKUKf8tfKupYmlPcnBURjdzVlE/edit?usp=sharing

Bạn chỉ cần chú ý dòng màu đỏ, copy đoạn đó và đưa nó vào URL sau:

https://googledrive.com/host/0BxKUKf8tfKupYmlPcnBURjdzVlE/

Vậy là xong, bạn thử truy cập liên kết này xem: https://googledrive.com/host/0BxKUKf8tfKupYmlPcnBURjdzVlE/

Nó sẽ cho ra một trang giống y như là trang bạn up lên hosting có phí vậy.

Chú ý là bạn không cần thêm đuôi .html, .css hay .js đằng sau tên file, bạn cứ để nguyên địa chỉ của nó như vậy là được.

Saturday, July 13, 2013

Code chống copy và click chuột phải - Song kiếm hợp bích CSS và JavaScript

Chống copy trên website

Ngăn thao tác quét bài viết là cách chống copy đơn giản nhưng khá hiệu quả. Tuy nó không chống lại được các đối tượng sao chép có chuyên môn về công nghệ thông tin, nhưng với các đối tượng copy thông thường thì rất hữu hiệu.

Trong bài viết này Blog Mạng Lưới Toàn Cầu sẽ "song kiếm hợp bích" cả 2 biện pháp là sử dụng CSS kết hợp với JavaScript. Bạn chỉ cần đưa đoạn code sau vào trước thẻ đóng </head> của mẫu HTML trang web của bạn là thành công:
<style>
body{
-webkit-touch-callout: none;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
-o-user-select: none;
user-select: none;
}
</style>

<script type="text/JavaScript">
function killCopy(e){
return false
}
function reEnable(){
return true
}
document.onselectstart=new Function ("return false")
if (window.sidebar){
document.onmousedown=killCopy
document.onclick=reEnable
}
</script>
Dưới đây là ảnh chụp màn hình cho bạn dễ quan sát hơn vị trí cần cho đoạn code trên:

Vị trí đoạn code chống copy
Đoạn code phải ở sau thẻ mở <head> và ở trước thẻ đóng </head>

Nếu bạn muốn chống thêm cả thao tác chuột phải (hạn chế tình trạng sao chép ảnh và văn bản), thì đây là đoạn code... Vị trí thì vẫn thế, bạn cứ để nó trước thẻ đóng </head>

<script type="text/JavaScript">
var message="NoRightClicking"; function defeatIE() {if (document.all) {(message);return false;}} function defeatNS(e) {if (document.layers||(document.getElementById&&!document.all)) { if (e.which==2||e.which==3) {(message);return false;}}} if (document.layers) {document.captureEvents(Event.MOUSEDOWN);document.onmousedown=defeatNS;} else{document.onmouseup=defeatNS;document.oncontextmenu=defeatIE;} document.oncontextmenu=new Function("return false") 
</script>

Nếu có thông báo lỗi khi save template (hay gặp với Blogspot) thì bạn thay bằng dòng code sau:

<script type="text/JavaScript" src="https://googledrive.com/host/0BxKUKf8tfKupN3lZMFc3X1FzdTQ/">
</script>


Và đây là kết quả thực hiện demo trên trang ở liên kết này, bạn sẽ thấy bạn không thể quét được nội dung, cũng như không thể chuột phải để lưu các ảnh động banner ở trang chủ của website trên.

Phần dưới đây mình sẽ giải thích ý nghĩa những dòng code trong bài, nếu bạn không phải là dân công nghệ thông tin thì không cần đọc cho đỡ nhức đầu, đưa các đoạn code trên vào trước thẻ </head> là bạn chống hành vi copy được rồi...

Đoạn CSS:

<style>
body{
 -webkit-touch-callout: none;
 -webkit-user-select: none; 
 -moz-user-select: none;    
 -ms-user-select: none;     
 -o-user-select: none;
 user-select: none;
 }
</style>

Ở trên là đoạn CSS3 chống copy, -webkit, -moz, -ms, -o là để tương thích với các trình duyệt khác nhau, vì là CSS3 nên nếu trình duyệt nào chưa hỗ trợ đầy đủ thì nó không hoạt động, nghĩa là đối tượng vẫn copy được! Do vậy ta mới cần thêm JavaScript - cái này thì hoạt động tốt trên hầu hết trình duyệt. Tuy nhiên JavaScript lại có điểm yếu là đối tượng có thể chủ động tắt JavaScript của trình duyệt để copy... Và đó là lý do ta nên kết hợp cả hai, vì CSS thì đối tượng lại không thể tự tắt. Phối hợp cả 2 làm cho chúng bù lấp các điểm yếu của nhau.

P/S: Đoạn code JavaScript có tham khảo từ trang này http://www.boogiejack.com/