我是jQuery的初学者并试图获得一些乐趣。我正在尝试制作一个按钮,在单击时会更改页面的背景,以及更改按钮的文本。我只需要两个场景: - 如果按钮显示“1”,则将按钮更改为“2”,将背景更改为黑色; - 如果按钮显示“2”,则将按钮更改为“1”,将背景更改为白色;
我的代码适用于第一次点击,但您不能多次点击。
我做错了什么?谢谢你的时间。
这是我的HTML
<body>
<button id="lumiere">1</button>
</body>
这是我的剧本
$(function() {
$('#lumiere').bind('click', function(event) {
if ($('#lumiere:contains("1")')) {
$('body').css('background-color', "black")
$('#lumiere').html('2')
}
else if ($('#lumiere:contains("2")')) {
$('body').css('background-color', "white")
$('#lumiere').html('1')
}
}
);
}
);
答案 0 :(得分:10)
你的if语句总是返回true,因为即使你的查询没有返回任何元素,它仍然会给你一个jQuery对象。请尝试检查“长度”属性:
$(function() {
$('#lumiere').bind('click', function(event) {
if ($('#lumiere:contains("1")').length) {
$('body').css('background-color', "black");
$('#lumiere').html('2');
}
else if ($('#lumiere:contains("2")').length) {
$('body').css('background-color', "white");
$('#lumiere').html('1');
}
});
});
答案 1 :(得分:1)
重构一下你的代码:
$(function() {
$('#lumiere').click(function(event) {
var $this = $(this);
if ($this.text() === '1') {
$('body').css('background-color', "black");
$this.text('2');
}
else if ($this.text() === '2') {
$('body').css('background-color', "white");
$this.text('1');
}
});
});
优化是:
bind()
已过时,请使用on()
click()
快捷方式this
text()
。答案 2 :(得分:1)
很高兴看到你正在使用jQuery。它是一个非常强大的工具,使用起来很有趣。请尝试以下方法:
<强> HTML:强>
<body>
<button id="lumiere">1</button>
</body>
保持你的HTML格式。
<强> CSS:强>
在<head></head>
块内的<style type="text/css"></style>
部分或与<link type="text/css" rel="stylesheet" href="external-sheet-name.css" />
链接的外部CSS文件中添加此类。
.bodyRed {
background-color: red;
}
下面将在JavaScript逻辑中使用此类。
<强> JavaScript的:强>
修改您的JavaScript,如下所示:
var $body = $('body'),
$button = $('#lumiere');
$button.on('click', function(event) {
if($body.hasClass('bodyRed')) {
$body.removeClass('bodyRed');
$button.text('2');
} else {
$body.addClass('bodyRed');
$button.text('1');
}
});
说明:
bind
更改为on
。 .on()
是用于附加事件处理程序的更新,更有效和首选的方法。上面的链接会将您带到.on()
。inline
CSS的需要。这也简化了逻辑。如果<body>
标记包含该类,请将其删除并更改按钮文本。否则,添加它然后修改按钮文本。
这就是全部。要查看其在运行中的效果,请查看此实时fiddle。
祝你好运,编码愉快! :)答案 3 :(得分:1)
不需要那么多并发症......
$(function() {
$('#lumiere').bind('click', function(event) {
var n = $('#lumiere').text();
switch (n) {
case '1':
$('body').css('background-color', "black");
$('#lumiere').text(2);
break;
case '2':
$('body').css('background-color', "white");
$('#lumiere').text(1);
break;
}
});
});
答案 4 :(得分:0)
$(function() {
$('#lumiere').bind('click', function(event) {
var v = parseInt($('#lumiere').text());
if (v === 1) {
$('body').css('background-color', "black")
$('#lumiere').html('2')
}
else if (v === 2) {
$('body').css('background-color', "white")
$('#lumiere').html('1')
}
}
);
} );
答案 5 :(得分:0)
我建议您使用Vanilla JS执行此任务,它更容易使用且效率更高:
window.onload = function() { // if you place the script after the element,
// you can remove this line and the corresponding }
document.getElementById('lumiere').onclick = function() {
document.body.style.backgroundColor = this.firstChild.nodeValue == 1 ? "black" : "white";
this.firstChild.nodeValue = 3-this.firstChild.nodeValue;
};
};