Показать скрыть элемент
Помогите, люди умные :thanks:
Размещаю на страничке такую рабочую конструкцию: <div id="expandAll">развернуть</div> <div id="collapseAll">свернуть</div> Она прекрасно сворачивает и разворачивает меню. ------------------------- Задача оставить одну ссылку, вначале: <div id="expandAll">развернуть</div> а после клика по ней: <div id="collapseAll">свернуть</div> ------------------------- Решение: var a=false function linkchange(obj) { if (a){ obj=document.getElementById('linkchangeid'); obj.innerHTML ='<div id="expandAll">развернуть</div>'; } else { obj=document.getElementById('linkchangeid'); obj.innerHTML ='<div id="collapseAll">свернуть</div>'; } a=!a } <div id="linkchangeid" onclick="linkchange(this)"><div id="expandAll">развернуть</div></div> И вроде как должно работать, и ссылка по клику меняется, но почему-то меню срабатывает только первый раз? :help: |
Если Вы таким странным образом меняете то нужно каждый раз события "прикручивать"
лучше сделать одну функцию toggleAll а менять только надпись а не весь элемент |
Я пробовал использовать встроенный toggle, проблема в том, что он открывает закрытые и закрывает открытые. Мне нужно чтобы по клику открывались все и закрывались все.
как поменять этот код: // handle toggle event function toggler() { $(this) .parent() // swap classes for hitarea .find(">.hitarea") .swapClass( CLASSES.collapsableHitarea, CLASSES.expandableHitarea ) .swapClass( CLASSES.lastCollapsableHitarea, CLASSES.lastExpandableHitarea ) .end() // swap classes for parent li .swapClass( CLASSES.collapsable, CLASSES.expandable ) .swapClass( CLASSES.lastCollapsable, CLASSES.lastExpandable ) // find child lists .find( ">ul" ) // toggle them .heightToggle( settings.animated, settings.toggle ); if ( settings.unique ) { $(this).parent() .siblings() // swap classes for hitarea .find(">.hitarea") .replaceClass( CLASSES.collapsableHitarea, CLASSES.expandableHitarea ) .replaceClass( CLASSES.lastCollapsableHitarea, CLASSES.lastExpandableHitarea ) .end() .replaceClass( CLASSES.collapsable, CLASSES.expandable ) .replaceClass( CLASSES.lastCollapsable, CLASSES.lastExpandable ) .find( ">ul" ) .heightHide( settings.animated, settings.toggle ); } } this.data("toggler", toggler); я ума не приложу... |
эту часть я не использую:
if ( settings.unique ) { $(this).parent() .siblings() // swap classes for hitarea .find(">.hitarea") .replaceClass( CLASSES.collapsableHitarea, CLASSES.expandableHitarea ) .replaceClass( CLASSES.lastCollapsableHitarea, CLASSES.lastExpandableHitarea ) .end() .replaceClass( CLASSES.collapsable, CLASSES.expandable ) .replaceClass( CLASSES.lastCollapsable, CLASSES.lastExpandable ) .find( ">ul" ) .heightHide( settings.animated, settings.toggle ); } |
Я наверно те ту toggle имел ввиду
У Вас же все работает с двумя ссылками Вам нельзя писать вот эту строчку obj.innerHTML ='<div id="collapseAll">свернуть</div>'; потому что события пропадают либо события сделайте используя on или вместо этого надо просто менять надпись-свернуть-развернуть а id="toggleAll" будет постоянным но запускаться поочереди 2 функции |
не получается...
|
// factory for treecontroller function treeController(tree, control) { // factory for click handlers function handler(filter) { return function() { // reuse toggle event handler, applying the elements to toggle // start searching for all hitareas toggler.apply( $("div." + CLASSES.hitarea, tree).filter(function() { // for plain toggle, no filter is provided, otherwise we need to check the parent element return filter ? $(this).parent("." + filter).length : true; }) ); return false; }; } // click on first element to collapse tree $("a:eq(0)", control).click( handler(CLASSES.collapsable) ); // 1 ссылка только открывает все // click on second to expand tree $("a:eq(1)", control).click( handler(CLASSES.expandable) ); // 2 ссылка только закрывает все // click on third to toggle tree $("a:eq(2)", control).click( handler() ); // 3 ссылка открывает все закрытые, закрывает все открытые, при повторном клике все наоборот } а нужна 1 ссылка, которая будет открывать все и закрывать все поочереди |
Ну я вам и написал как это сделать например
$("a:eq(0)", control).on("click", function(){handler(CLASSES.collapsable)}); ну и вторую ссылку "a:eq(1)" аналогично остальное оставить как было |
все вернул как было вначале темы, поменял 2 строчки, не работает совсем, даже первый клик перестал срабатывать
|
вот так поменял:
//$("a:eq(0)", control).click( handler(CLASSES.collapsable) ); $("a:eq(0)", control).on("click", function(){handler(CLASSES.collapsable)}); // click on second to expand tree //$("a:eq(1)", control).click( handler(CLASSES.expandable) ); $("a:eq(1)", control).on("click", function(){handler(CLASSES.expandable)}); |
Часовой пояс GMT +3, время: 10:36. |