przyznam, że zabawa z Prototype mnie wciągnęła i chciałbym Wam pokazać moją inną pracę.
http://phpworkstation.com/prototype/kategorie.html
Jest to skrypt umożliwiający wybór kategorii w taki sposób w jaki wybiera się kategorie na allegro. Obsługuje nieograniczoną liczbę zagnieżdżeń. Docelowo tablica k ma być tworzona dynamicznie na podstawie bazy danych (Ajax niepotrzebnie spowolniłby skrypt).
Proszę o opinie nt. skrypciku oraz pomoc w pewnym problemie. Mam problem z usuwaniem zbędnych selectów przy cofnięciu się w drzewie kategorii. Sądziłem, że użycie remove() będzie ok ale nie bardzo chce to działać. Tymczasowo więc dałem hide(). Wizualnie wygląda tak jak chciałem jednak elementy nadal siedzą w kodzie, a nie powinny. Gdyby ktoś znał rozwiązanie proszę o info.
var Category = Class.create(); Category.prototype = { initialize: function(id, name) { this.id = id; this.name = name; }, getId: function() { return this.id; }, getName: function() { return this.name; } } var CategoryList = Class.create(); CategoryList.prototype = { initialize: function(id) { this.id = id; }, build: function() { var categoryId = this.id; if (k[this.id]) { categoryId = ""; var select = document.createElement("select"); select.setAttribute("size", 10); select.onchange = function() { var i = 0; while (select.next(i)) { //select.next(i).remove(); //<- select.next(i).hide(); i++; } var cl = new CategoryList(this.value); cl.build(); } var length = k[this.id].length; for (var i=0; i<length; i++) { var option = document.createElement("option"); option.text = k[this.id][i].getName(); option.value = k[this.id][i].getId(); select.appendChild(option); } $("container").appendChild(select); } setCategoryId(categoryId); } } var k = new Array(); k[0] = new Array(); k[0][0] = new Category(1, "Kategoria 1"); k[0][1] = new Category(2, "Kategoria 2"); k[0][2] = new Category(3, "Kategoria 3"); k[1] = new Array(); k[1][0] = new Category(4, "Kategoria 1 1"); k[1][1] = new Category(5, "Kategoria 1 2"); k[1][2] = new Category(6, "Kategoria 1 3"); k[2] = new Array(); k[2][0] = new Category(7, "Kategoria 2 1"); k[5] = new Array(); k[5][0] = new Category(8, "Kategoria 1 2 1"); k[5][1] = new Category(9, "Kategoria 1 2 2"); function initCategoryList() { var categoryList = new CategoryList(0); categoryList.build(); } function setCategoryId(id) { $("categoryId").value = id; } Event.observe(window, "load", initCategoryList, false);
Pozdrawiam: pion
PS: zastanawiałem się czy nie dać tego do "Gotowe rozwiązania" gdyż jest to dość często poszukiwany skrypt, jednak na razie chciałbym poznać opinie na jego temat.
PS2: teraz zauważyłem, że pod IE skrypt nie działa :/ Opera i FireFox śmigają.