2013-02-15 2 views
0

Я пытаюсь изменить класс кнопки при нажатии на нее. Почему не мой рабочий: видеть мой fiddleпростая функция onclick на кнопке не работает

HTML:

<button id="repeatMon" onclick="changeStyle()"><span> Mon </span></button> 
<br/> 
<button id="repeatTues" data-bind="checked: repeatTues" onclick="changeStyle()"><span> Tues </span></button> 
<br/> 
<button id="repeatWeds" data-bind="checked: repeatWeds" onclick="changeStyle()"><span> Weds </span></button> 
<br/> 
<button id="repeatThurs" data-bind="checked: repeatThurs" onclick="changeStyle()"><span> Thurs </span></button> 
<br/> 
<button id="repeatFri" data-bind="checked: repeatFri" onclick="changeStyle()"><span> Fri </span></button> 
<br/> 
<button id="repeatSat" data-bind="checked: repeatSat" onclick="changeStyle()"><span> Sat </span></button> 
<br/> 
<button id="repeatSun" data-bind="checked: repeatSun" onclick="changeStyle()"><span> Sun </span></button> 
<br/> 

CSS:

button{ 
    width: 60px; 
    height: 35px; 
    border-radius: 0px; 
    color: #cfcfcf; 
    background: #0a4a58; 
} 

.active{ 
    color: #fff; 
    background: ##02AEFF; 
} 

JQuery:

function changeStyle(){ 
    $(this).toggleClass('active'); 
} 

спасибо!

+0

'onclick =" changeStyle (this) "'? – Antony

ответ

2

Вы нно g jquery, поэтому вам не нужно повторять себя.Удалить onclick от кнопки и сделать это с JQuery

<button id="repeatMon"><span> Mon </span></button> <br/> 
<button id="repeatTues" data-bind="checked: repeatTues"><span> Tues </span></button><br/> 
<button id="repeatWeds" data-bind="checked: repeatWeds"><span> Weds </span></button><br/> 
<button id="repeatThurs" data-bind="checked: repeatThurs"><span> Thurs </span></button><br/> 
<button id="repeatFri" data-bind="checked: repeatFri"><span> Fri </span></button><br/> 
<button id="repeatSat" data-bind="checked: repeatSat"><span> Sat </span></button><br/> 
<button id="repeatSun" data-bind="checked: repeatSun"><span> Sun </span></button><br/> 

удалить дополнительный хэш (#) от вашего цвета в CSS в классе активного

.active { 
    color: #fff; 
    background: #02AEFF; 
} 

и написать сценарий

$(function() { 
    var buttons = $('button[id^="repeat"]'); 
    buttons.click(function() { 
     buttons.removeClass('active'); 
     $(this).addClass('active'); 
    }); 
}); 

jsfiddle

+0

Отлично! Спасибо! –

4
<button id="repeatSun" data-bind="checked: repeatSun" onclick="changeStyle(this)"><span> Sun </span></button> 

function changeStyle(btn){ 
    $(btn).toggleClass('active'); 
} 

В качестве альтернативы лучший метод можно было бы добавить click event handlers с JQuery.

Добавить один и тот же класс для всех кнопок и применить обработчик события клика к этому классу:

<button id="repeatSun" data-bind="checked: repeatSun" class="changestyle"><span> Sun </span></button> 

$(".changestyle").click(function(){ 
    $(".changestyle").removeClass('active'); 
    $(this).addClass('active'); 
}); 
+0

'Это' зарезервировано, я думаю. –

+0

@ dystroy Я думал, что, если честно, но я не был уверен. Обновите ответ в случае. – Curt

+0

Благодарим вас за ответ. первый не работает: http://jsfiddle.net/VUmza/33/ –

5

Вы используете JQuery, удалите встроенный JS и сделать это правильный путь:

$('[id^="repeat"]').on('click', function() { 
    $(this).toggleClass('active'); 
}); 

FIDDLE

Для переключения активного состояния на одну кнопку в то время:

$('[id^="repeat"]').on('click', function() { 
    $(this).toggleClass('active').siblings().removeClass('active'); 
}); 
+0

спасибо. Цените. Но что мне делать, если я хочу только изменить один класс за раз? т.е. только одна кнопка может иметь перегруженный класс? –

+0

см. Мой ответ на этот вопрос – pbaris

1

Вам необходимо передать кнопку.

function changeStyle(e){ 
    $(e).toggleClass('active'); 
} 

И в HTML:

<button id="repeatSun" data-bind="checked: repeatSun" onclick="changeStyle(this)"><span> Sun </span></button> 
+0

спасибо, но не работает - http://jsfiddle.net/VUmza/38/ –

+0

@DavidVanStaden Где находится кнопка onclick на кнопке? Вам нужно дать 'onclick =" changeStyle (this) "'. –

+0

@DavidVanStaden Это была проблема с jsfiddle. Проверьте это: http://jsfiddle.net/praveenscience/VUmza/42/ Это работает !!! :) –

1

А что-то вроде этого:

$("button").click(function() { 
    $(this).toggleClass('active'); 
}); 

http://jsfiddle.net/VUmza/26/

EDIT: Только одна кнопка на время.

http://jsfiddle.net/VUmza/39/

$("button").click(function() { 
    $("button").each(function() { 
     $(this).removeClass("active"); 
    }); 

    $(this).toggleClass('active'); 
}); 
+0

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

+0

@DavidVanStaden Я редактировал свое сообщение, чтобы переключаться только по одному. – Jako

+0

Спасибо. Он отлично работает. Цените свой ответ, но, к сожалению, ответ pbaris лучше –

1

попробовать это:

<button id="repeatMon" class="clickable"><span> Mon </span></button> 

Jquery внутри document.ready()

$('.clickable').click(function(){ 
    $(this).toggleClass('active'); 
}); 

DEMO

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