Advertisement
Guest User

Untitled

a guest
Sep 8th, 2011
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. (function ($) {
  2.     $.fn.clearSelect = function () {
  3.         return this.each(function () {
  4.             if (this.tagName == 'SELECT') {
  5.                 this.options.length = 0;
  6.                 $(this).attr('disabled', 'disabled');
  7.             }
  8.         });
  9.     }
  10.     $.fn.clearField = function (selector) {
  11.         this.nextAll(selector).remove();
  12.         return this;
  13.     }
  14.     $.fn.fillSelect = function (dataArray) {
  15.         return this.clearSelect().each(function () {
  16.             if (this.tagName == 'SELECT') {
  17.                 var currentSelect = this;
  18.                 var start = new Option('Выбрать...', '-1');
  19.                 if ($.support.cssFloat) {
  20.                     currentSelect.add(start, null);
  21.                 } else {
  22.                     currentSelect.add(start);
  23.                 }
  24.                 $.each(dataArray, function (index, data) {
  25.                     if (data.name) {
  26.                         var option = new Option(data.name, data.id);
  27.                         if ($.support.cssFloat) {
  28.                             currentSelect.add(option, null);
  29.                         } else {
  30.                             currentSelect.add(option);
  31.                         }
  32.                     }
  33.                 });
  34.                 $(this).removeAttr('disabled').find('option:first').attr('selected', 'selected');
  35.             }
  36.         });
  37.     }
  38. })(jQuery);
  39.  
  40. function getCategory(pcategory, level) {
  41.     $.ajax({
  42.         url: 'list.php',
  43.         type: 'POST',
  44.         data: 'pcategory=' + pcategory + '&level=' + level,
  45.         dataType: 'JSON',
  46.         timeout: 5000,
  47.         beforeSend: function () {
  48.             $('select[name^=category_]').attr('disabled', 'disabled');
  49.         },
  50.         complete: function () {
  51.             $('select[name^=category_]').removeAttr('disabled');
  52.         },
  53.         success: function (response) {
  54.             var data = eval('(' + response + ')');
  55.             if (data.count === 'undefined' || data.count == 0) {
  56.                 $('select[name=category_' + (data.level - 1) + ']').clearField('select[name^=category]').clearField('span');
  57.                 return false;
  58.             }
  59.             if ($('select[name=category_' + data.level + ']').length) {
  60.                 $('select[name=category_' + data.level + ']').clearField('select[name^=category]').clearField('span').fillSelect(data.item);
  61.             } else {
  62.                 $('#categories select:last').after('<span>&gt;</span> <select name="category_' + data.level + '"></select>');
  63.                 $('select[name=category_' + data.level + ']').fillSelect(data.item);
  64.             }
  65.             $('select[name=category_' + data.level + ']').unbind('change');
  66.             $('select[name=category_' + data.level + ']').change(function () {
  67.                 return clickEvent($(this));
  68.             });
  69.             return false;
  70.         },
  71.         error: function () {
  72.             $('#msg').append('<p>Some error with categories. Please, try later ;)</p>');
  73.             return false;
  74.         }
  75.     });
  76. }
  77.  
  78. function clickEvent(select) {
  79.     var id = select.find('option:selected').attr('value');
  80.     if (id == '-1') {
  81.         select.clearField('select[name^=category]').clearField('span');
  82.         return false;
  83.     }
  84.     var level = parseInt(select.attr('name').replace('category_', '')) + 1;
  85.     return getCategory(id, level);
  86. }
  87. $(document).ready(function () {
  88.     $('select[name^=category] option').live("click", function () {
  89.         var select = $(this).parents('select');
  90.         var level = parseInt(select.attr('name').replace('category_', '')) + 1;
  91.         return getCategory(select.find('option:selected').attr('value'), level);
  92.     })
  93.     getCategory(0, 0);
  94. });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement