MY GOAL:
I'm modifying the Interface 1.2 Shopping Cart to become
a photo picker to create photo albums. I have the basic
drag/drop working. I need to add these using ajax:
-- 'Search photos by tag'
-- 'send photo id to server on drop'
-- 'remove photo id from server on remove'

THE PROBLEM:
I have the separate pieces working, but I'm not sure how
to weave them together (still very new to jQuery). For
example, when I add my 'Search photos by tag' ajax function
to the drag and drop page search works fine, but drag/drop
stops working.

THE CODE:

This is kinda long, hope that's ok. I'll just show
the search function, ask later about the other functions
if I'm still stuck.

My ajax search form and code are in
<div id="searchAlbumPhotos">.

Thumbnails matching the search tag show up in
<div id="theSearchResultImages">.

////////////////////////////////////////////
<script type="text/javascript">
$(document).ready(
  function()
  {
    $('#theSearchResultImages a')
      .bind(
        'click',
        function() {
          $(this.parentNode)
            .TransferTo(
              {
                to:addImageToCart(this.parentNode),
                className:'transferImage',
                duration: 400
              }
            );
          return false;
        }
      );
    $('div.image').Draggable({revert: true, fx: 300, ghosting: true,
opacity: 0.4});
    $('#cart').Droppable(
      {
        accept :     'image',
        activeclass: 'activeCart',
        hoverclass:  'hoverCart',
        tolerance:   'intersect',
        onActivate:   function(dragged)
        {
          if (!this.shakedFirstTime) {
            $(this).Shake(3);
            this.shakedFirstTime = true;
          }
        },
        onDrop:      addImageToCart
      }
    );
  }
);
var addImageToCart = function(dragged)
{
  var cartItem;
  var imageName = $('h2', dragged).html();
  var photoID = parseFloat($('span', dragged).html());
  var imageId = $(dragged).attr('id');
  var imageSrc = $('img',dragged).attr('src');
  var isInCart = $('#' + imageId + '_cart');
  if (isInCart.size() == 1) {
    var quantity = parseInt(isInCart.find('span.quantity').html()) +
0;
    isInCart.find('span.quantity').html(quantity
+'').end().Pulsate(300, 2);
    cartItem = isInCart.get(0);
  } else {
    $('#cartImages')
      .append('<div class="imageCart" id="' + imageId + '_cart">' +
imageName + '<br />' + '<img src="' + imageSrc + '">' + '<br /><a
href="#">remove</a><br />qty: <span class="quantity">1</span><br /
>Photo ID: <span class="price">' + photoID + '</span></div>')
      .find('div.imageCart:last')
      .fadeIn(400)
      .find('a')
      .bind(
        'click',
        function(){
          $(this.parentNode).DropOutDown(
            400,
            function() {
              $(this).remove();
              calculateCartTotal();
            }
          );
          return false;
        }
      );
    cartItem = $('div.imageCart:last').get(0);
  }
  calculateCartTotal();
  return cartItem;
};
var calculateCartTotal = function()
{
  var total = 0;
  $('#cartImages .imageCart').each(
    function()
    {
      var quantity = parseInt($('span.quantity', this).html());
      total += quantity;
    }
  );
  $('#cartTotal').html(total);
  $('#cart p').Highlight(500, '#ff0', function(){$
(this).css('backgroundColor', 'transparent');});
};
</script>
<div id="cart" class="cart">
  <h3>Image cart :: Total Images: <span id="cartTotal">0</span></h3>
  <div id="cartImages"></div>
</div>

<div id="theSearchResultImages">
// thumbnails show up here, with id=someinteger and class=image
</div>

<div id="searchAlbumPhotos">
<p><strong>Search Photos by Tags</strong> - space separated</p>
<p><form action="/jsrpc/search_photos_by_tags"
        onsubmit='$.ajax({url: "/jsrpc/search_photos_by_tags",
                  data: $(this.elements).serialize(),
                  success: function(response){$
("#theSearchResultImages").html(response);},
                  dataType: "html"});
                  return false;' method="POST" >
<br />
<input type="text" name="tagname" value="" />&nbsp;
<input type="submit" name="submit" value="+" />
</form>
</p>
<p>&nbsp;</p>
</div>
<div style="overflow: hidden; position: absolute; display: none;
cursor: move; list-style-type: none; list-style-image: none; list-
style-position: outside;" id="dragHelper"></div>

Reply via email to