[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: js скрипт
antonov_sa
Здравствуйте!
у меня есть список вот с таким содержанием
<ul>
<li class="closed"><span class="folder">Папка</span>
<ul style="display: block;">
<li><input name="item_list[]" value="list1" type="checkbox"> Вкладка1</li>
<li><input name="item_list[]" value="list2" type="checkbox"> Вкладка2</li>
<li class="last"><input name="item_list[]" value="list3" type="checkbox"> Вкладка3</li>
</ul>
</li>
<li class="closed"><span class="folder">Папка2</span>
.....
<li>
<ul>
мне нужно, чтобы когда хотя бы один чекбокс "checked", то class="closed" у первого тега li исчезал, или наоборот появлялся класс, я могу это сделать по средствам пхп, когда генерируется список, но это уж слишком грузит базу.. подскажите, пожалйста, как это сделать на js, заранее спасибо!



Спустя 12 минут, 13 секунд (16.03.2010 - 09:32) Nikitian написал(а):
Как этот код может грузить базу не представляю, т.к. здесь нет ничего, что хоть чего-то требовало бы от бд, ну да ладно.

$("input[type='checkbox']").bind("click",function(){
var flag=false;
$("input[type='checkbox']").each(function(){
if($(this).attr("checked")){flag=true;return false;}
}
);
if(flag)$("li.closed:first").removeClass("closed");
});

Как-то так

Предвосхищая возможные вопросы: мануал по jquery здесь читаю: http://slyweb.ru/jquerydoc/index-subject.php



Если же имеется ввиду, что чекбоксы установлен изначально, то так:

$(document).ready(function(){
var flag=false;
$("input[type='checkbox']").each(function(){
if($(this).attr("checked")){flag=true;return false;}
}
);
if(flag)$("li.closed:first").removeClass("closed");
});

Спустя 1 час, 26 минут, 34 секунды (16.03.2010 - 10:58) Игорь_Vasinsky написал(а):
Цитата
if(flag)$("li.closed:first").removeClass("closed");


ты удалил класс, а новый не назначил используй переключатель toggleClass

Спустя 3 минуты, 6 секунд (16.03.2010 - 11:01) Nikitian написал(а):
Зачем новый? Убрал класс, будут действовать общие для данного типа элемента стили. Элементы полне могут сущестсоввать и без класса.

Спустя 4 минуты, 28 секунд (16.03.2010 - 11:06) Игорь_Vasinsky написал(а):
у меня на практике так не работало. тока переключатель, а у тебя? Работает код ?

Спустя 14 минут, 21 секунда (16.03.2010 - 11:20) antonov_sa написал(а):
чекбоксы изначально установлены, да, но не работает(
я очень плохо понимаю в js, но если меняю
if($(this).attr("checked")){flag=true;return false;} на
if($(this).attr("checked")){alert("!");} то вижу столько алертов, сколько у меня чекедов в списке, значит что-то не так с if(flag)$("li.closed:first").removeClass("closed");
но не могу понять что((

Спустя 5 минут, 28 секунд (16.03.2010 - 11:26) Игорь_Vasinsky написал(а):
Цитата
if(flag)$("li.closed:first").removeClass("closed");


ну попробуй


if(flag)$("li.closed:first").toggleClass("closed");

Спустя 7 минут, 46 секунд (16.03.2010 - 11:33) antonov_sa написал(а):
не работает, а по исходному коду страницы, класс должен исчезать?

Спустя 1 минута, 31 секунда (16.03.2010 - 11:35) Игорь_Vasinsky написал(а):
теоритическаи да, должен исчезнуть, но на практике мне это ни чего не довало,

опиши css классы свои

Спустя 1 минута, 42 секунды (16.03.2010 - 11:37) Nikitian написал(а):
Цитата (antonov_sa @ 16.03.2010 - 08:33)
не работает, а по исходному коду страницы, класс должен исчезать?

В firebug'e, режим "html" исчезнет, в исходном коде нет.

Спустя 6 минут, 29 секунд (16.03.2010 - 11:43) antonov_sa написал(а):
ох, а вообще этот класс не цсс обрабатывается, а js, я использую плагин jquery для дерева treeview (www.linkexchanger.su/2008/49.html) вот отсюда его взял, вся фишка в том, что когда класс клосед, то папка свернута, а без него развернута, и мне нужно, чтобы та папка в которой отмечены чекбоксы, генерились открытыми

if (!settings.prerendered) {
// mark last tree items
this.filter(":last-child:not(ul)").addClass(CLASSES.last);
// collapse whole tree, or only those marked as closed, anyway except those marked as open
this.filter((settings.collapsed ? "" : "." + CLASSES.closed) + ":not(." + CLASSES.open + ")").find(">ul").hide();
}
____
var CLASSES = $.fn.treeview.classes = {
open: "open",
closed: "closed",



Спустя 4 минуты, 44 секунды (16.03.2010 - 11:48) antonov_sa написал(а):
и вот я поставил <script type="text/javascript">
$(document).ready(function(){
var flag=false;
$("input[type='checkbox']").each(function(){
if($(this).attr("checked")){flag=true;return false;}
});
if(flag)$("li.closed").removeClass("closed");
});</script>
выше того когда, который обрабатывает дерево и есть эффект.. стерлись все классы во всех папках, а не только в тех, которые мне нужны..

Спустя 3 минуты, 28 секунд (16.03.2010 - 11:51) Игорь_Vasinsky написал(а):
Цитата
стерлись все классы во всех папках, а не только в тех,


КАК ВАРИАНТ

там где стираешь не нужный класс - снова пропиши назначение новых классов-для тех которые у тя удаляются случайно, я так делал когда много уровневое древовидное меню делал

Спустя 6 минут, 54 секунды (16.03.2010 - 11:58) antonov_sa написал(а):
но как?((

Спустя 2 минуты, 36 секунд (16.03.2010 - 12:01) qpayct написал(а):
а можно вопрос? зачем нужно отмечать чекбоксы? ты их применяешь заместо плюсов в дереве?

Спустя 2 минуты, 45 секунд (16.03.2010 - 12:04) antonov_sa написал(а):
if(flag)$("li.closed:first").toggleClass("closed"); если так делаю, то раскрывается первая папка во всем списке, может быть если я буду идентификатор каждом li с классом генерировать, и тогда возможно как то будет можно сделать?)


__
ну чекбоксы отмечены, чтобы их добавить в базу потом

Спустя 4 минуты, 10 секунд (16.03.2010 - 12:08) antonov_sa написал(а):
как бы сделать, чтобы не первый элемент, а предыдущий от чекбокса вверх убирался?

Спустя 8 минут, 39 секунд (16.03.2010 - 12:16) qpayct написал(а):
Цитата (antonov_sa @ 16.03.2010 - 11:04)
чекбоксы отмечены, чтобы их добавить в базу потом

ну ты обьясняешь... отмечай код, читать будет удобней, ато наворотил тут....
несколько моментов:
есть вложеный список. он свёрнут/развёрнут?
при нажатии на любой чекбокс список сворачивается весь или сворачивается всё кроме того где нажимаешь?

Спустя 4 минуты, 5 секунд (16.03.2010 - 12:20) Игорь_Vasinsky написал(а):
function какаято(){
if(flag)$("li.closed:first").removeClass("closed");
....что то там у тебя.addClass("open");
..что то там у тебя.addClass("open");
..что то там у тебя.addClass("open");
}

Спустя 3 часа, 14 минут, 34 секунды (16.03.2010 - 15:35) antonov_sa написал(а):
Цитата (qpayct @ 16.03.2010 - 09:16)
Цитата (antonov_sa @ 16.03.2010 - 11:04)
чекбоксы отмечены, чтобы их добавить в базу потом

ну ты обьясняешь... отмечай код, читать будет удобней, ато наворотил тут....
несколько моментов:
есть вложеный список. он свёрнут/развёрнут?
при нажатии на любой чекбокс список сворачивается весь или сворачивается всё кроме того где нажимаешь?

да есть вложенный список в каждый li основного списка, есть скрипт, который, если у li внешнего списка есть класс closed разворачевает его, в противном случае он свернут, и все это генерится пхп, если чекбокс внутри вложенного списка "чекед", то список должен быть развернут, и класса "клосед" быть не должно, просто если это делать в пхп, у меня получается цикл в цикле в цикле, а это в моем случае примерно 200 в кубе раз, вешается не база точнее, а вообще сам скрипт долго генерит такое дерево, поэтому и хотелось это сделать это через js )

Спустя 24 минуты, 58 секунд (16.03.2010 - 16:00) qpayct написал(а):
antonov_sa
ну вот видишь, как всё просто smile.gif теперь хоть стало ясно в чём задача. осталось только показать код, которым ты генерируешь списки в HTML и тогда сразу станет понятно, как тебе помочь.

Спустя 4 часа, 24 минуты, 43 секунды (16.03.2010 - 20:25) antonov_sa написал(а):
Цитата (qpayct @ 16.03.2010 - 13:00)
antonov_sa
ну вот видишь, как всё просто smile.gif теперь хоть стало ясно в чём задача. осталось только показать код, которым ты генерируешь списки в HTML и тогда сразу станет понятно, как тебе помочь.

ох ну у меня там геренится код из 3х таблиц, пхп я думаю даже смысла нет показывать, ибо все как-то слишком заморочено) но хтмл в итоге получается таковым -

<ul>
<li
class="closed">
<ul>
<li>
CHECKBOX</li>
<li>
CHECKBOX</li>
....
<li>CHECKBOX</li>
</ul>
</li>
<li
class="closed">
<ul>
<li>
CHECKBOX</li>
<li>
CHECKBOX</li>
....
<li>CHECKBOX</li>
</ul>
</li>

....
</ul>

если один из чекбоксов во вложенном списке "checked", то класс "closed" надо стереть в теге <li>
вот... )

Спустя 21 минута, 15 секунд (16.03.2010 - 20:46) qpayct написал(а):
для этого тебе надо javascript прописать функцию, которая будет происходить при нажатии на чекбокс, но до этого надо иммена в html сгенерировать в правильном порядке, так чтоб чекбоксы относились к строкам списка. а потом просто шлёш в функцию идентификатор и меняешь класс. проще пареной репы

Спустя 39 минут, 53 секунды (16.03.2010 - 21:26) antonov_sa написал(а):
Цитата (qpayct @ 16.03.2010 - 17:46)
для этого тебе надо javascript прописать функцию, которая будет происходить при нажатии на чекбокс, но до этого надо иммена в html сгенерировать в правильном порядке, так чтоб чекбоксы относились к строкам списка. а потом просто шлёш в функцию идентификатор и меняешь класс. проще пареной репы

у меня сразу генерятся чекбоксы, с "checked" или без, мне не нужно менять класс при нажатии на чекбос, только при генерации списка, могу легко добавить для LI c тегом "closed" идентификатор уникальный, для каждого, если это поможет, скажем id="li1" "li2" и тд, помогите, плиз, с кодом на js, ибо я очень плохо в нем понимаю, и прочитав, посты, я конечно представляю как это должно быть, но просто не зная синтаксиса не могу это воспроизвести:( У меня просто все строки генерятся либо с классом "клосед" либо все без него на пхп..
Заранее спасибо за помощь!

Спустя 5 минут, 52 секунды (16.03.2010 - 21:32) antonov_sa написал(а):
ой нечаянно написал и не стереть(

Спустя 5 часов, 9 минут, 25 секунд (17.03.2010 - 02:41) qpayct написал(а):
<ul>
<li
class="closed">
<ul>
<li
id="li[идентификатор_чекбокса]"><input type="checkbox" id="идентификатор_чекбокса" onclick="chkClick(id);" /></li>
....

function chkClick(id) {
var chkli = document.getElementById('li[' + id + ']');
// дальше думаю разберёшься. тебе надо просто найти родителя этой и убрать у него класс. вот и всё
}
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.