我需要在 3 个状态之间切换
- 状态#1:未选中只是灰色背景
- 状态#2:选定的背景设置为绿色
- 状态#2:再次单击,将背景设置为红色 现在每次单击时在红色和绿色之间切换
这怎么可能?除了更改课程之外,我还需要同时进行 ajax 调用。
我基本上只想要一个选择的,未选择的切换,我不知道如何检测用户第一次点击了灰色框
对于初学者,我现在有:
<div id="test" onclick => "$(this).toggleClass('selected_yes')"> test <div>
那么你仍然可以使用toggle
:
$('#test').click(function() {
if (this.className.match(/green|red/)) $(this).toggleClass('green red');
else $(this).toggleClass('green');
// ajax call here
});
你可以试试这个。
$('#test').click(function(){
var $this = $(this), state = $this.data('state') || '';
if(state == ''){
$this.addClass('greyBg');
$this.data('state', 'unselected');
}
else if(state == 'unselected'){
$this.removeClass('greyBg').addClass('greenBg');
$this.data('state', 'selected');
}
else if(state == 'selected'){
$this.removeClass('greyBg greenBg').addClass('redBg');
$this.data('state', 'clicked');
}
else{
if($this.hasClass('redBg')){
$this.removeClass('redBg').addClass('greenBg');
}
else{
$this.removeClass('greenBg').addClass('redBg');
}
//Here you can make ajax call now
}
});
每次单击时,我都会使用 jQuerydata
方法维护其状态并执行所需的逻辑。我希望这对你有意义。
使用适当的样式定义所需的类。
.greyBg { background-color: grey; }
.greenBg { background-color: green; }
.redBg { background-color: red; }
假设你有三个类:
.unselected { background-color: grey; }
.selected { background-color: green; }
.clicked { background-color: red; }
然后您可以按如下方式使用它们:
<div id="test" class="unselected">test<div>
然后(在 test 元素之后的 document.ready 或脚本块中):
$("#test").click(function() {
var $this = $(this);
if ($this.hasClass("selected")) {
$this.removeClass("selected").addClass("clicked");
// ajax here if needed
} else if ($this.hasClass("clicked")) {
$this.removeClass("clicked").addClass("selected");
// ajax here if needed
} else if ($this.hasClass("unselected")) {
$this.removeClass("unselected").addClass("selected");
// ajax here if needed
}
});
演示:http: //jsfiddle.net/LLCMa/
以上应该是不言自明的。当然,如果更合适的话,您可以将您的 Ajax 调用放在 if/else 结构之外,但如果您需要根据当前状态进行不同的 Ajax 调用,请执行上述操作。
$('#test').click(function() {
var $this = $(this), clicked = $(this).hasClass('clicked');
if (!clicked) {
$this.addClass('clicked');
} else {
var isRed = $this.hasClass('red');
$this.toggleClass('red', !isRed).toggleClass('green', isRed)
}
// do ajax
})