Trang chủ Liên hệ Sơ đồ  
 
Trang chủ 1001 Mẫu Web Thiết kế Web Lập trình Quản trị Web Web & Hosting Hình nền Blog Icon & Logo
 
 
     
       Mẫu web mới nhất
Xem | ID: 9733
Xem | ID: 2764
JAVASCRIPT
Phần mềm :
Trình độ : Beginer
Đánh giá : /

Chọn các sản phẩm bằng cách kéo thả vào giỏ hàng, sử dụng Javascript.
(Thứ Sáu, 12/03/2010-2:50 PM)

Đối với ứng dụng này, mình dùng SQL Server 2005 Express để tạo một CSDL đơn giản có tên là ToyShopDatabase, có một bảng duy nhất tên là TblToys, gồm có 4 trường: ToyID, Title, ImageUrl và Price.

Để hiển thị dữ liệu, mình sử dụng một Datalist. Hàm BindData() dưới đây được sử dụng để nhận dữ liệu từ CSDL.

private void BindData()
    {
        string connectionString = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
        SqlConnection myConnection = new SqlConnection(connectionString);

        SqlDataAdapter ad = new SqlDataAdapter("SELECT * FROM tblToys", myConnection);
        DataSet ds = new DataSet();
        ad.Fill(ds);

        dlToys.DataSource = ds;
        dlToys.DataBind();
    }

Bạn có thể nhìn thấy các Item được hiển thị trong hình ảnh dưới đây:

Chúng ta biết rằng các thẻ DIV sẽ được coi như là một đối tượng có thể kéo đi được. Tuy nhiên có rất nhiều thẻ DIV trong một trang, vậy làm thế nào có thể xác định được thẻ DIV nào thuộc đặc tính kéo và thả này?  Chúng ta sẽ sử dụng một biểu thức quy tắc để lọc những thẻ DIV đúng:

var dragElementPattern = ".+_a$";

var divElements = document.getElementsByTagName("div");     

for(i=0;i<divElements.length;i++)
{  
   
    if(IsMatch(divElements[i].id, dragElementPattern))
    {           
        MakeElementDraggable(divElements[i]); 
    }
}

Đầu tiên, chúng ta sẽ tìm và nhận tất cả các thẻ DIV có trong  trang web, sau đó tìm các thẻ DIV đúng bằng các biểu thức quy tắc. Chức năng IsMatch() sẽ chịu trách nhiệm tìm ID của các phần tử phù hợp với Pattern:

function IsMatch(id, pattern)
{
    var regularExpresssion = new RegExp(pattern);
    if(id.match(regularExpresssion)) return true;
    else return false;
}

Việc tạo một bản sao cho sản phẩm khi kéo sản phẩm vào giỏ hàng là rất cần thiết. Nếu không tạo bản sao cho thi hình ảnh thật sẽ mất đi khi chúng ta kéo và thả chúng vào giỏ hàng.

function InitiateDrag(e)
{   
    mouseState = 'down';
   
    var evt = e || window.event;
   
    startX = parseInt(evt.clientX);
    startY = parseInt(evt.clientY);   
   
    clone = obj.cloneNode(true);
          
    clone.style.position = 'absolute';  
    clone.style.top = parseInt(startY) + 'px';
    clone.style.left = parseInt(startX) + 'px'; 
   
    document.body.appendChild(clone);    
   
    document.onmousemove = Drag;
    document.onmouseup = Drop; 
   
    return false;            
}

hiện nay có rất nhiều trình duyệt khác nhau, vì vậy mà việc tạo một zone thích ứng với trình duyệt tương đối khó. Sự kiện Drop chỉ thành công khi sản phẩm được thả vào đúng drop zone. Thực chất thì nó dựa vào vị trí của con trỏ khi ta thả tay và vị trí của Drop Zone.

function InitiateDrag(e)
{   
    mouseState = 'down';
   
    var evt = e || window.event;
   
    startX = parseInt(evt.clientX);
    startY = parseInt(evt.clientY);   
   
    clone = obj.cloneNode(true);
          
    clone.style.position = 'absolute';  
    clone.style.top = parseInt(startY) + 'px';
    clone.style.left = parseInt(startX) + 'px'; 
   
    document.body.appendChild(clone);    
   
    document.onmousemove = Drag;
    document.onmouseup = Drop; 
   
    return false;            
}

Nếu sản phẩm không được thả vào trong vùng Drop Zone thì sản phẩm chỉ biến mất đi thôi. Tuy nhiên nếu đúng trong vùng đó thì sản phẩm sẽ được cho vào Shopping Cart. Chức năng AddPrice sẽ có nhiệm vụ cập nhật Tổng tiền và hiển thị sản phẩm trên Shopping Cart. Mỗi sản phẩm được chèn vào bên trong một thẻ DIV mà sau đó sẽ được chèn vào trong vùng Drop Zone.

function AddPrice()
{  
         
   var title = GetProductTitle();
   var price = GetProductPrice();
  
      
    var dZone = document.getElementById("dZone");
    var textNode = document.createTextNode(title);   
    var priceNode = document.createTextNode(price);
       
    var spaceNode = document.createTextNode(':  $');  
    var paragraphElement = document.createElement('p');
   
    // create the delete button
   
    var deleteButton = document.createElement('button');
    deleteButton.value = 'Delete';
    deleteButton.innerHTML = 'Delete';
    deleteButton.onclick = DeleteItem;
   
    var item = document.createElement('div');
    item.id = 'itemDiv' + uniqueNumber;
     
    item.appendChild(paragraphElement);    
    item.appendChild(textNode);
    item.appendChild(spaceNode);
    item.appendChild(priceNode);
    item.appendChild(spaceNode);
    item.appendChild(deleteButton);
   
    dZone.appendChild(item); 
   
    // increment the price
    IncrementTotal(price);
    uniqueNumber++;
   
}

2 hàm GetProductTitle()GetProductPrice() được sử dụng để lấy Title và Price từ sản phẩm. Biến uniqueNumber được sử dụng để tạo ra mã duy nhất cho mỗi thẻ DIV mới được tạo ra. Nó sẽ tăng giá trị mỗi khi một sản phẩm được cho vào giỏ hàng. Chức năng IncrementTotal() để sử dụng để tính tổng giá sản phẩm trong giỏ hàng.

Bên cạnh tên và giá sản phẩm, ta để luôn một nút Delete để có thể xóa sản phẩm trực tiếp. khi nhấn nút đó, sản phẩm tương ứng sẽ bị xóa ngay khỏi giỏ hàng.

function DeleteItem(e)
{   
    var evt = e || window.event;
    var evtTarget = evt.target || evt.srcElement;
   
    if(IsFireFox())
    {
        price = evtTarget.parentNode.childNodes[2].nodeValue;
        evtTarget.parentNode.parentNode.removeChild(evtTarget.parentNode);
    }   
    else
    {     
    price = evtTarget.parentElement.childNodes[2].nodeValue;
    evtTarget.parentElement.parentElement.removeChild(evtTarget.parentElement);
    }
      
    DecrementTotal(price);
}

Còn chức năng DecrementTotal() dùng để cân bằng lại tổng giá trị sản phẩm hiện có trong giỏ hàng khi mỗi sản phẩm được xóa bỏ.

Với bài viết này thì chức năng Shopping cart vẫn thực sự chưa hoàn thiện. Hy vọng các bạn sẽ ứng dụng được vào website của mình. Các bạn có thể download mã nguồn của chương trình tại đây.

Theo Zensoft


 In bài này  Gửi bài viết
    Các bài trước
    Các bài sau
      Bài quan tâm nhiều nhất  

    Download phần mềm 
    được ưa dùng  nhất