Witam,
przyznam, że zabawa z Prototype mnie wciągnęła i chciałbym Wam pokazać moją inną pracę.
http://phpworkstation.com/prototype/kategorie.htmlJest 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ą.
Ten post edytował phpion.com 22.11.2007, 21:00:25