Я не уверен, что не так с моим кодом прямо сейчас. У меня есть набор jquery, где if (i == 0)
и вы нажимаете кнопку, тогда фон кнопок становится синим, а затем переменная (i) устанавливается в 1. Тогда у меня есть оператор else if
говорящий, что if (i == 1)
затем поверните кнопку до серого. Проблема в том, что она не работает. Какие-либо предложения? Заранее спасибо!
Jquery
var i = 0;
$(document).ready(function() {
if (i == 0) {
$('button').click(function() {
$(this).css({
'background-color' : 'lightblue',
'border' : '1px solid #5FA9CF'
});
});
i = 1;
}
else if (i == 1) {
$('button').click(function() {
$(this).css({
'background-color' : '#E0E0E0',
'border' : '1px solid #CCC'
});
});
i = 0;
}
});
Вы должны сделать условие внутри события click:
$(document).ready(function() {
$('button').click(function(){
if (i == 0) {
$(this).css({
'background-color' : 'lightblue',
'border' : '1px solid #5FA9CF'
});
i = 1;
}
else if (i == 1) {
$(this).css({
'background-color' : '#E0E0E0',
'border' : '1px solid #CCC'
});
i = 0;
}
})
});
Когда вы пишете то, что хотите, это ясно.
Когда DOM готов ($(document).ready()
),
Вы хотите нажать и кнопку ($('button).click()
)
и если значение равно 0, то somthing (if(i == 0)
)
иначе, если он равен другой вещи (else if(i == 1)
).
var i = 0;
$(document).ready(function()
{
$('button').click(function()
{
if (i === 0)
{
$(this).css({
'background-color' : 'lightblue',
'border' : '1px solid #5FA9CF'
});
i = 1;
}
else
{
$(this).css({
'background-color' : '#E0E0E0',
'border' : '1px solid #CCC'
});
i = 0;
}
});
});
Проблема в том, что вы привязываете один обработчик при загрузке документа - "переведите эту кнопку в синий цвет". Второй обработчик никогда не запускается.
Пытаться:
$(document).ready(function() {
$('button').click(function() {
if (i == 0) {
$(this).css({
'background-color' : 'lightblue',
'border' : '1px solid #5FA9CF'
});
i = 1;
} else {
$(this).css({
'background-color' : '#E0E0E0',
'border' : '1px solid #CCC'
});
i = 0;
}
});
}
Вы можете переместить это, if
... else
внутри кнопки нажмите, или даже лучше использовать css для управления стилями, как показано ниже.
CSS:
.btn-lightblue {
background-color : lightblue;
border : 1px solid #5FA9CF;
}
.btn-def {
background-color : #E0E0E0;
border : 1px solid #CCC;
}
Javascript
$(document).ready(function() {
$('button').click(function() {
if ($(this).hasClass('btn-def') {
$(this).addClass('btn-lightblue').removeClass('btn-def');
} else {
$(this).addClass('btn-def').removeClass('btn-lightblue');
}
});
});
Надеюсь, это поможет Fiddle здесь
CSS
.btn-on {
background-color: lightblue;
border : 1px solid #5FA9CF;
}
.btn-off {
background-color: #E0E0E0;
border : 1px solid #CCC;
}
JQuery
$(document).ready(function() {
var btn = $("button");
btn.on("click",function(){
$(this).toggleClass("btn-on");
});
});
Это много кода, как насчет этого?
$('button').click(function() {
$(this).toggleClass('on');
});
в паре с этим css
button{background-color:#E0E0E0;border: 1px solid #CCCCCC}
button.on{background-color:#5FA9CF;border:1px solid #5FA9CF}
Я сделал скрипку http://jsfiddle.net/filever10/y9KML/
Ваш CSS:
.class1 {
background-color: lightblue;
border: 1px solid #5FA9CF;
}
.class2 {
background-color: #E0E0E0;
border: 1px solid #CCC;
}
Ваш Javascript
$(document).ready(function() {
$('body').delegate('button', 'click', function() {
if ($(this).hasClass('class1')) {
$(this).toggleClass('class1', 'class2');
}
else {
$(this).toggleClass('class2', 'class1');
}
});
});
$('button').click(function(){$(this).toggleClass('class1 class2')})
но button
требует class1
при загрузке страницы.
.delegate()
был заменен (и улучшен) на .on()
. api.jquery.com/delegate
Вы должны сделать эти классы стилей в своем css.
Вы можете использовать функцию.hasClass http://api.jquery.com/hasClass/ вместо (i == 0)
Вы также должны использовать делегат для такого рода вещей http://api.jquery.com/delegate/
toggleClass()
?
if
...else
внутри нажатия кнопки ... еще лучше использоватьclass
для манипулирования цветами.