2015-03-18 2 views
0

Примечание: У меня есть только несколько дней опыта работы с jQuery, хотя я искал вокруг, чтобы попытаться исправить проблему и протестировать ее, но она просто не работает.jQueryUI Stackable (Удалить содержимое на разных вкладках нажмите)

То, что я пытаюсь достичь:

У меня возникли некоторые проблемы с jQueryUI в .selectable, я создал Выбирается с четырьмя вкладками, каждая вкладка отображает разное содержание добавил к нему (а класс для изображения, добавление кнопки и добавление текста абзаца).

Вот визуальный взгляд на то, что я пытаюсь достичь: http://puu.sh/gELQi/211165f55a.png


Моя проблема

В настоящее время, при нажатии на одной вкладке он будет корректно отображать содержимое этой вкладки, однако, как только вы нажмете на другой/той же вкладке снова он:

  • Добавить содержимое перекрывающихся предыдущий вкладка

    1. Кнопка добавляется на каждом новом щелчку же или другой вкладке
    2. добавлен
    3. Новый класс изображения и нажат ниже предыдущей вкладке
    4. Пункт тэ х перекрывается


Что мне нужно

Мне нужен способ, так что на каждый вкладке нажмите (тот же или другой вкладке) будет очистить все предыдущее содержимое последняя вкладка (любые классы кнопок/абзацев/изображений).

Кроме того, еще одна проблема с jQueryUI .selectable() заключается в том, что она позволяет сразу выбирать несколько вкладок, если вы перетащите курсор на вкладки в моем JSFiddle, вы увидите, что я имею в виду, я только хочу, чтобы это быть в состоянии выбрать один при макс.


Мой код разбивается

JQuery

//Tab Content added in relation to tab number 
if ($('#elements .elementOne').hasClass('ui-selected')) { 
      // Tab 1 
      $(".elementOneInfo").addClass("elementOneInfoImage"); 
      $(".elementOneInfo").append("<button><a href='/clans'>MORE<two</button>"); 
      $(".elementOneInfo").append("<p>"+textOne+"</p>"); 
     } 
if ($('#elements .elementTwo').hasClass('ui-selected')) { 
      //Tab 2 etc. 
      $(".elementTwoInfo").addClass("elementTwoInfoImage"); 
      [...] 

HTML

<div class="container elements-wrapper"> 
    <div class="col-md-12"> 
     <div class="row"> 

      <!-- Where new content is added --> 

      <div class="col-md-7 elements-info"> 
       <div class="elementOneInfo"></div> 
       <div class="elementTwoInfo"></div> 
       <div class="elementThreeInfo"></div> 
       <div class="elementFourInfo"></div> 
      </div> 

      <!-- Where tabs exist --> 

      <div class="col-md-5 elements-titles-wrapper"> 
       <ul id="elements"> 
        <li class="elementOne light ui-widget-content"><h3>Title1</h3></li> 
        <li class="elementTwo dark ui-widget-content"><h3>Title2</h3></li> 
        <li class="elementThree light ui-widget-content"><h3>Title3</h3></li> 
        <li class="elementFour dark ui-widget-content"><h3>Title4</h3></li> 
       </ul> 
      </div> 
     </div> 
    </div> 
</div> 

SCSS

/* Tabs */ 

.elements-titles-wrapper { 
    padding:0; 
    ul { 
     list-style: none; 
     padding-left: 0; 
    } 
    li > h3 { 
     color: white; 
     margin:0; 
     padding: 15px 0 15px 15px; 
    } 
    .light { 
     background-color: $aqua; 
    } 

    .dark { 
     background-color: $dark_aqua; 
    } 

    .active { 
     background-color: #75c5e0; 
    } 
    .ui-selected { 
     background: $light_aqua; 
    } 
    .ui-selecting { 
     background: $light_aqua; 
    } 
} 


/* Tab Content Added */ 

.elements-info { 
    padding:0; 
    p { 
     color:white; 
     font-size:12px; 
     background: rgba(0,0,0,.5); 
     padding: 10px; 
     position:absolute; 
     bottom:0; 
     margin-bottom: 0; 
     @include font(Open-Sans); 
    } 
    button { 
     background: $cream; 
     border-radius:5px; 
     margin: 5px 0 0 5px; 
     a { 
      color:$brown; 
      @include font(Open-Sans); 
      padding: 4px 8px; 
      text-decoration: none; 
     } 
    } 

    /* Random Background Images for testing */ 
    .elementOneInfoImage { 
     background: url(http://wallpaperkick.com/wp-content/uploads/2015/02/gray-wallpaper.jpg) no-repeat center right; 
     height:224px; 
    } 
    .elementTwoInfoImage { 
     background: url(http://cdn.wonderfulengineering.com/wp-content/uploads/2014/09/red-wallpaper-4.jpg) no-repeat center right; 
     height:224px; 
    } 
    .elementThreeInfoImage { 
     background: url(http://cdn.wonderfulengineering.com/wp-content/uploads/2014/09/Green-Wallpaper-3.jpg) no-repeat center right; 
     height:224px; 
    } 
    .elementFourInfoImage { 
     background: url(http://walldiskpaper.com/wp-content/uploads/2014/11/Blue-Light-Wallpaper-Image-Picture.png) no-repeat center right; 
     height:224px; 
    } 
} 

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

+0

Вы присоединяя кнопку MORE снова и снова. Вам нужно, чтобы он был создан только один раз, или он отлично работает прямо сейчас? –

+0

@Joker Я хочу, чтобы кнопка была применена только один раз на каждой вкладке, это не только кнопка, но и классы текста и изображения добавляются снова и снова, кнопка выглядит более доминирующей, но они делают то же самое. Каждый раз, когда нажимается табуляция (такая же или другая), я хочу, чтобы она очистила содержимое предыдущей вкладки и применила новую информацию. –

ответ

0

Попробуйте

$(document).ready(function() { 
 
    var content = { 
 
     "server-one": "Aenean eu leo quam." 
 
      + " Pellentesque ornare sem lacinia quam venenatis vestibulum." 
 
      + " Donec id elit non mi porta gravida at eget metus." 
 
      + " <button><a href='/clans'>MORE<two</button>", 
 
     "server-two": "Nulla vitae elit libero, a pharetra augue." 
 
      + " Etiam porta sem malesuada magna mollis euismod." 
 
      + " <button><a href='/clans'>MORE<two</button>", 
 
     "server-three": "Cum sociis natoque penatibus et magnis " 
 
      + "dis parturient montes, nascetur ridiculus mus." 
 
      + " Nullam quis risus eget urna mollis ornare vel eu leo." 
 
      + " <button><a href='/clans'>MORE<two</button>", 
 
     "server-four": "Donec id elit non mi porta gravida at eget metus." 
 
      + " Aenean eu leo quam." 
 
      + " Pellentesque ornare sem lacinia quam venenatis vestibulum." 
 
      + " <button><a href='/clans'>MORE<two</button>" 
 
    }; 
 

 
    $('#server-titles').selectable({ 
 
     selected: function (event, ui) { 
 
      var sel = $(ui.selected).attr("class").split(" ")[0]; 
 
      var elem = $(".row [class^=" + sel.concat("-info") + "]"); 
 
      elem.html(content[sel]).show(0).siblings().hide(0); 
 
       
 
     } 
 
    }); 
 
});
div[class$=image] { 
 
    display:none; 
 
} 
 

 
/* Server Tabs */ 
 
/* line 423, ../sass/home.scss */ 
 
.server-titles-wrapper { 
 
    padding: 0; 
 
} 
 
/* line 425, ../sass/home.scss */ 
 
.server-titles-wrapper ul { 
 
    list-style: none; 
 
    padding-left: 0; 
 
} 
 
/* line 429, ../sass/home.scss */ 
 
.server-titles-wrapper .server > h3 { 
 
    color: white; 
 
    margin: 0; 
 
    padding: 15px 0 15px 15px; 
 
} 
 
/* line 434, ../sass/home.scss */ 
 
.server-titles-wrapper .light { 
 
    background-color: #6bb3cc; 
 
} 
 
/* line 438, ../sass/home.scss */ 
 
.server-titles-wrapper .dark { 
 
    background-color: #61a4ba; 
 
} 
 
/* line 442, ../sass/home.scss */ 
 
.server-titles-wrapper .active { 
 
    background-color: #75c5e0; 
 
} 
 
/* line 445, ../sass/home.scss */ 
 
.server-titles-wrapper .ui-selected { 
 
    background: #75c5e0; 
 
} 
 
/* line 448, ../sass/home.scss */ 
 
.server-titles-wrapper .ui-selecting { 
 
    background: #75c5e0; 
 
} 
 

 
/* line 453, ../sass/home.scss */ 
 
.server-info { 
 
    padding: 0; 
 
} 
 
/* line 455, ../sass/home.scss */ 
 
.server-info p { 
 
    color: white; 
 
    font-size: 12px; 
 
    background: rgba(0, 0, 0, 0.5); 
 
    padding: 10px; 
 
    position: absolute; 
 
    bottom: 0; 
 
    margin-bottom: 0; 
 
    font-family: Open-Sans, Trebuchet MS, Serif; 
 
} 
 
/* line 465, ../sass/home.scss */ 
 
.server-info button { 
 
    background: #f4dab9; 
 
    border-radius: 5px; 
 
    margin: 10px 0 0 10px; 
 
} 
 
/* line 469, ../sass/home.scss */ 
 
.server-info button a { 
 
    color: #946d3b; 
 
    font-family: Open-Sans, Trebuchet MS, Serif; 
 
    padding: 4px 8px; 
 
    text-decoration: none; 
 
} 
 
/* line 476, ../sass/home.scss */ 
 
.server-info .server-one-info-image { 
 
    background: url(../img/clans.jpg) no-repeat center right; 
 
    height: 224px; 
 
} 
 
/* line 480, ../sass/home.scss */ 
 
.server-info .server-two-info-image { 
 
    background: url(../img/test.jpg) no-repeat center right; 
 
    height: 224px; 
 
} 
 

 
.server-info .server-one-info-image { 
 
    background: url(http://wallpaperkick.com/wp-content/uploads/2015/02/gray-wallpaper.jpg) no-repeat center right; 
 
    height:224px; 
 
} 
 
.server-info .server-two-info-image { 
 
    background: url(http://cdn.wonderfulengineering.com/wp-content/uploads/2014/09/red-wallpaper-4.jpg) no-repeat center right; 
 
    height:224px; 
 
} 
 
.server-info .server-three-info-image { 
 
    background: url(http://cdn.wonderfulengineering.com/wp-content/uploads/2014/09/Green-Wallpaper-3.jpg) no-repeat center right; 
 
    height:224px; 
 
} 
 
.server-info .server-four-info-image { 
 
    background: url(http://walldiskpaper.com/wp-content/uploads/2014/11/Blue-Light-Wallpaper-Image-Picture.png) no-repeat center right; 
 
    height:224px; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"> 
 
</script> 
 
<script src="https://code.jquery.com/ui/1.11.0/jquery-ui.js"></script> 
 
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js"> 
 
</script> 
 
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css" rel="stylesheet"/> 
 

 
<div class="container server-wrapper"> 
 
    <div class="col-md-12"> 
 
     <div class="row"> 
 
      <div class="col-md-7 server-info"> 
 
       <div class="server-one-info server-one-info-image"></div> 
 
       <div class="server-two-info server-two-info-image"></div> 
 
       <div class="server-three-info server-three-info-image"></div> 
 
       <div class="server-four-info server-four-info-image"></div> 
 
      </div> 
 
      <div class="col-md-5 server-titles-wrapper"> 
 
       <div id="display"></div> 
 
       <ul id="server-titles"> 
 
        <li class="server-one light server ui-widget-content"> 
 
         <h3>Title1</h3> 
 
        </li> 
 
        <li class="server-two dark server ui-widget-content"> 
 
         <h3>Title2</h3> 
 
        </li> 
 
        <li class="server-three light server ui-widget-content"> 
 
         <h3>Title3</h3> 
 
        </li> 
 
        <li class="server-four dark server ui-widget-content"> 
 
         <h3>Title4</h3> 
 
        </li> 
 
       </ul> 
 
      </div> 
 
     </div> 
 
    </div> 
 
</div>

jsfiddle http://jsfiddle.net/p5gsby49/12/

+0

Это отличная работа, спасибо, могли бы вы объяснить, что на самом деле делает код? http://jsfiddle.net/p5gsby49/13/ Кроме того, почему изображения скользят так? С слайда я вижу много черных тонких полосок по экрану, есть ли способ удалить эту функцию слайда, поскольку я не вижу упоминания об этом в jQuery –

+0

@JoeMethven 'js' в первую очередь использует' server- * ' 'class' см.' sel' 'ui-selected', чтобы выбрать соответствующий элемент' server - * - info', затем отобразить содержимое из объекта content, используя тот же шаблон, ieg, 'sel'' server- * 'является свойством 'contents', возвращающее значение' text/html'. Попробуйте '.show',' .hide' 'duration' в' 0' отрегулировать видимый рендеринг элементов между 'display: block',' display: none' http://jsfiddle.net/p5gsby49/14/; см. также stacksnippets выше, где оба '.show',' .hide' установлены в '0' – guest271314

+0

. Огромное спасибо, мне удалось добавить короткое увядание, а не функцию слайда, которая произошла, у меня есть одна последняя мелочь, которую я просто нужно добавить, прежде чем я полностью поработаю с этим: мне нужно как-то поменять вкладку (tab-1 - server-one/server-one-info), которая будет выбрана ui на верхней вкладке и показать верхнюю содержимое вкладок до того, как пользователь даже нажал на что-нибудь еще, возможно ли это с кодом, который вы мне дали? Я попытался добавить 'code if ($ ('# server-titles li'). Click() == false) {' в качестве альтернативы, если selectable не был нажат, но этот вид не удался. –

Смежные вопросы