2013-03-12 2 views
-1

Я новичок в jQuery, и мне нужно, когда я нажимаю, чтобы изменить цвет кнопки, не меняя класс. Как я могу это сделать.Изменение цвета кнопки без изменения класса

<div class="button">First button</div> 
<div class="button">Second button</div> 
<div class="button">3 button</div> 
<div class="button">4 button</div> 

$('.button').on('click', function() { 
    $('.button').css('background-color', '#C00'); 
}) 

.button { 
    background-color: #9C0; 
    height: 50px; 
    width: 100px; 
    margin-top:5px; 
} 

http://jsfiddle.net/nJ895/

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

UPDATE:

жаль, что я попытать решение, но мой код является более сложным и не работают с этим: http://jsfiddle.net/nJ895/7/

Здесь мне нужно решить некоторые проблемы, поэтому, когда я нажимаю на «1 кнопку» это кнопка должна изменить цвет, но если я нажму на кнопку «2», тогда «1 кнопка должна потерять цвет» и «2 получить цвет» ... это не будет совершенным, вторая «1 кнопка» и «2 кнопки» в другой div, который должен работать таким же образом ... пожалуйста, ПОМОГИТЕ. также #id_ не важно в этом случае, но мне нужно здесь, чтобы показать весь код.

+0

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

+0

Вы можете иметь более одного класса для каждого элемента. «Чистым» способом было бы добавить новый класс к кнопке в дополнение к существующей. – JJJ

+0

http://jsfiddle.net/nJ895/8/ –

ответ

1
$('.button').on('click', function() { 
    $(this).css('background-color', '#C00'); 
}); 

Обновлено демо: http://jsfiddle.net/nJ895/1/

Поскольку вы новичок в JQuery, я объясню, что происходит. В исходном коде вы выбираете все узлы с классом .button и привязываете событие клика ко всем из них. Когда кто-нибудь из них получает щелчок, вы снова выбираете все узлы и применяете CSS ко всем из них. Объект $(this) указывает на узел, связанный с событием, которое только что произошло, и применит только CSS к этому соответствующему узлу.

Я бы рекомендовал подумать о добавлении нового класса вместо применения буквального CSS. Это позволит вам сохранить свой стиль вне кода JavaScript.

CSS:

.button { 
    background-color : #9C0; 
    height   : 50px; 
    width   : 100px; 
    margin-top  : 5px; 
} 
.button.active { 
    background-color: #C00; 
} 

JQuery:

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

Демо: http://jsfiddle.net/nJ895/3/

Или, если вы хотите только одну кнопку, выбранную в то время:

$('.button').on('click', function() { 
    $(this).addClass('active').siblings().removeClass('active'); 
}); 

Демо: http://jsfiddle.net/nJ895/5/

+0

Спасибо, но не работает для моего кода. –

+0

спасибо, но не работает для моего кода: http://jsfiddle.net/nJ895/8/ –

+0

спасибо за помощь, я интегрирую свой код в мой, но все еще не работаю –

0

попробовать с помощью $(this)

$(this).css('background-color', '#C00'); 

В вашем случае вы целились все кнопки с коллекцией под названием $('.button'). Вам нужно зафиксировать событие для текущего объекта, который получил событие.

+0

любые вопросы с ответом, почему downvote? – Jai

+0

Повторяющийся. Другой ответ говорит то же самое, но делает это лучше. – iambriansreed

+0

@iambriansreed объяснение появилось перед другим ответом здесь. – Jai

0

Вы должны использовать this для нацеливания Clicked элемент

$('.button').on('click', function() { 
    $(this).css('background-color', '#C00'); 
}) 

Но более правильный путь для изменения цвета является использование дополнительного класса

CSS

.button { 
    background-color: #9C0; 
    height: 50px; 
    width: 100px; 
    margin-top:5px; 
} 
.button.active{ 
    background-color: #c00; 
} 

JQuery

$('.button').on('click', function() { 
    $(this).addClass('active'); 
}); 

Демо на http://jsfiddle.net/nJ895/2/

+1

@iambriansreed какой комментарий? (* это ** ** обязательно лучше в этом случае *) –

+0

@iambriansreed Я подозреваю, что OP не хочет использовать класс только потому, что он не знает, что его можно использовать. – JJJ

+0

спасибо, но не работает для моего кода http://jsfiddle.net/nJ895/8/ –

0
jQuery('.button').live('click', function() { 
    jQuery(this).css('background-color', 'red'); 
}) 
Смежные вопросы