2016-09-16 3 views
-1

Казалось бы, простой вопрос, который меня смущает ... все ответы кажутся только для JQuery.Изменить класс div на клик

Я генерирую табличный календарь с PHP.

enter image description here

Каждый день календаря является tr > td > div, который выглядит, как это на данный момент:

{cal_cell_content} 
    <div class="" id="event" href="" onclick="this.className=\'selected\';return getDate({day});"> 
     {day} 
    </div> 
{/cal_cell_content} 

Когда пользователь нажимает на одну из дивы Я хочу, чтобы на фоне этого DIV, чтобы изменить его класс css - 'selected'.

Затем, если пользователь нажимает на другой div, я хочу, чтобы этот класс изменился на выбранный и предыдущий класс был удален, так что только один div в любое время может быть «выбран».

В настоящее время я использую this.className='selected, который работает , за исключением нескольких divs.

Как получить поведение, чтобы я мог выбрать один div и выделить его, а затем, если я решит нажать другой div, предыдущий div будет отменен, а новый div будет выбран?

+0

Вам нужно отменить выбор всех остальных, а затем выбрать его. Добавьте один класс во все ваши примеры divs «day», затем выполните '$ ('. Day'). RemoveClass ('selected');' и затем добавьте выбранный к действительно выбранному div –

ответ

1

Добавить прослушиватель событий в класс сНа через петлю, и добавить еще класс «выбран» в div, если он щелкнут. В противном случае удалите класс «selected». Класс «selected» будет содержать ваш материал css.

Например,

var x = document.getElementsByClassName('yourClass') 
for (var i = 0; i < x.length; i++) { 
    x[i].addEventListener("click", function(){ 

    var selectedEl = document.querySelector(".selected"); 
    if(selectedEl){ 
     selectedEl.classList.remove("selected"); 
    } 
    this.classList.add("selected"); 

    }, false);; 
} 
+0

Спасибо за ответ, я собираюсь попробовать и cobble что-то вместе ... –

+0

просто добавил пример кода в простой javascript – codemax

+0

Пример кода действительно большой, спасибо, попробуем это сейчас. –

1

Ваших дивы имеют одинаковый идентификатор, что это неправильно, сделай это как этот

{cal_cell_content} 
    <div class="event" href=""> 
     {day} 
    </div> 
{/cal_cell_content} 


$('.event').click(function(){ 
    $('.event').removeClass('selected'); 
    $(this).addClass('selected'); 
}); 

с JavaScript:

{cal_cell_content} 
    <div class="event" href="" onclick="selectMe(this);"> 
     {day} 
    </div> 
{/cal_cell_content} 

function selectMe(obj){ 
    var divs = document.getElementsByClassName("event"); 
    for(var i = 0; i < divs.length; i++) 
    { 
     divs[i].className = "event"; 
    } 
    obj.className = "event selected" 
} 
+0

Спасибо, что нашли время ответить! Есть ли способ сделать что-то подобное без jQuery? Добавление и включение всей библиотеки jQuery для чего-то такого тривиального кажется излишним. –

+1

Хорошо, я добавил решение с javascript –

+0

Спасибо за ответ Aleksandar, мне пришлось выбрать другой ответ, хотя оба отлично работают! –

0
$('#event').click(function(){ 
    $(this).attr('class', 'selected'); 
}); 
+0

Хотя это может ответить на вопрос, лучше всего включить объяснение кода, предоставленного сообществу (и оригинальному плакату), чтобы лучше понять ответ. Кроме того, вы пробовали этот код? Я не думаю, что все работает так хорошо (кажется, есть одна или несколько ошибок) – ochi

0

В стандартном JavaScript:

document.getElementById('foo').className += ' selected' 

или в JQuery:

$('#foo').addClass('selected'); 
+0

Спасибо за ваш ответ –

1

попробовать этот родной JavaScript

document.getElementById('event').setAttribute('class', 'selected'); 
+0

Спасибо, я попробовал это, но мне нужно, чтобы другой выбранный div был «отменен», когда я нажимаю новый div , –

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