所以我試圖設置一個函數來偵聽IF和ONLY如果3個特殊項目被「檢查」。jQuery list exclusivity function
到目前爲止,我有一個包含9個項目的列表,當3個「S」(特殊)具有點擊的類時,背景將變爲藍色,然後如果其中任何一個未點擊。
我想知道的是如果有一種方法可以滿足條件(藍色背景)如果和僅當如果選中了三個「S」並且沒有其他選項被檢查。
演示,請參閱:http://jsfiddle.net/stursby/V5Hee/
任何幫助將是巨大的,
感謝。
所以我試圖設置一個函數來偵聽IF和ONLY如果3個特殊項目被「檢查」。jQuery list exclusivity function
到目前爲止,我有一個包含9個項目的列表,當3個「S」(特殊)具有點擊的類時,背景將變爲藍色,然後如果其中任何一個未點擊。
我想知道的是如果有一種方法可以滿足條件(藍色背景)如果和僅當如果選中了三個「S」並且沒有其他選項被檢查。
演示,請參閱:http://jsfiddle.net/stursby/V5Hee/
任何幫助將是巨大的,
感謝。
是的,添加一個條件,確保只有3點擊,然後檢查他們是你想要的。
$('#grid li.clicked').size() == 3
UPDATE
使用.length
而不是.size()
如指出更好pracitce:
$('#grid li.clicked').length == 3
我解決了問題,在您的jsfiddle這個HTML:
<ul id="grid">
<li id="a1" class="r">R</li>
<li id="a2" class="s">S</li>
<li id="a3" class="r">R</li>
<li id="a4" class="r">R</li>
<li id="a5" class="s">S</li>
<li id="a6" class="s">S</li>
<li id="a7" class="r">R</li>
<li id="a8" class="r">R</li>
<li id="a9" class="r">R</li>
</ul>
而且,此javascript:
$("#grid li").click(function() {
$(this).toggleClass("clicked");
});
$(window).click(function() {
var color = "#fff";
if ($("#grid li.s.clicked").length == 3 && $("#grid li.r.clicked").length == 0) {
color = "blue";
}
$('body').css('background', color);
});
你可以看到它在這裏工作:http://jsfiddle.net/jfriend00/8W6K2/。
改變我做:
試試這個:
$(window).click(function() {
var good = true;
$('#grid li').each(function() {
if ($(this).html()=='S' && !$(this).hasClass('clicked') ||
$(this).html()=='R' && $(this).hasClass('clicked')) {
good = false;
}
});
if (good) {
$('body').css('background', 'blue');
}
else {
$('body').css('background', '#fff');
}
});
下面是使用JS對象的另一種方法。你不需要窗口監聽器。你可以只使用#grid li上的監聽器。
<ul id="grid">
<li id="1">R</li>
<li id="2" class="s_type">S</li>
<li id="3">R</li>
<li id="4">R</li>
<li id="5" class="s_type">S</li>
<li id="6" class="s_type">S</li>
<li id="7">R</li>
<li id="8">R</li>
<li id="9">R</li>
</ul>
$("li").click(function() {
if ($(this).is(".clicked")) {
$(this).removeClass("clicked");
} else {
$(this).addClass("clicked");
}
clicks.checkClicks();
});
var clicks = {
checked: 0,
total: 0,
checkClicks: function(){
clicks.checked = 0;
clicks.total = 0;
$('#grid li').each(function(){
if($(this).hasClass('clicked') && $(this).hasClass('s_type'))
{
clicks.checked += 1;
clicks.total += 1;
}
else if($(this).hasClass('clicked'))
{
clicks.total += 1;
}
});
if(clicks.checked == 3 && clicks.total == 3)
{
$('body').css('background', 'blue');
}
else
{
$('body').css('background', '#fff');
}
}
};
我的解決方案非常接近jfriend00的解決方案。但是我的解決方案涉及data-
屬性(見this jsfiddle的證明):
HTML:
<ul id="grid">
<li data-content="R">R</li>
<li data-content="S">S</li>
<li data-content="R">R</li>
<li data-content="R">R</li>
<li data-content="S">S</li>
<li data-content="S">S</li>
<li data-content="R">R</li>
<li data-content="R">R</li>
<li data-content="R">R</li>
</ul>
的JavaScript:
var $grid = jQuery('#grid');
$grid.find('li[data-content]').click(function(){
jQuery(this).toggleClass('clicked');
if ($grid.find('li[data-content="S"].clicked').length==3 &&
$grid.find('li[data-content!="S"].clicked').length==0){
jQuery('body').css({'background-color': 'blue'});
}else{
jQuery('body').css({'background-color': 'transparent'});
};
});
因此,基本上:
length
財產告訴你有關數組或jQuery對象中元素的數量ct,data-
屬性),
如果您已經閱讀(http://api.jquery.com/size/)[開`.size()`文檔】,你就會知道,'.length`優於`.size ()`(請參閱參考文檔頁面瞭解詳細信息)。 – Tadeck 2011-12-15 23:22:39
正是我所需要的。 – stursby 2011-12-15 23:37:34