2012-11-08 92 views
0

我遇到點擊事件問題。點擊其他具有事件的元素(點擊),不會像其他地方點擊一樣。我想要活動的一個元素或沒有。點擊其他

演示:http://jsfiddle.net/WP4RH/

代碼:

$('span').click(function(){ 
    var $this = $(this); 
    if($this.hasClass('active')){ 
     $this.removeClass('active')} 
    else $this.addClass('active'); 

    $('div').click(function(){       
     if (!$this.has(this).length) {         
      $this.removeClass('active');        
     }   
    }); 
    return false; 
    }); 
+0

我希望我能抓住你的問題......什麼是最終結果,你正在尋找? – VIDesignz

回答

2

span事件處理程序的開頭添加這樣的:

$('.active').removeClass('active'); 

Demo

這是假設你想多點擊相同的時間間隔來保存在active。如果你不想要,那就讓我知道,我可以修改代碼。

+0

@vega你無時無刻不在乎嗎?還是僅僅在今天? – VIDesignz

+0

@VIDesignz ...這不是故意的..讓我換句話..你可能想要移動跨點擊處理程序以外的div點擊處理程序,以避免每次點擊時綁定處理程序。 –

+0

@vega我同意,但仍不確定OP的意圖是什麼... – VIDesignz

0

如果您想在單擊span本身時保持切換關閉功能,則可以使用以下內容。另外,請注意,每次單擊一個範圍時,您都綁定了事件處理程序

http://jsfiddle.net/WP4RH/7/

$("span").click(function() { 
    $(this).siblings("span").removeClass("active"); // remove from other spans 
    $(this).toggleClass("active"); // toggle this span 
    return false; 
}); 
​ 
$("div").click(function() { 
    $(this).find("span").removeClass("active"); // remove from all spans 
}); 
+0

有沒有任何機會,爲每個元素單獨做這件事?我不想在整個文檔中搜索並從所有特定(類,名稱,...)元素中刪除類。我的例子只是例證。 – Moriarty

+0

@Moriarty:應該怎樣「分開」呢? – pimvdb

+0

我不知道。因此,我的例子中的問題,因此我使用點擊點擊。 – Moriarty

1

對於初學者來說,你應該基於div元素在外面再removeClass移動格處理。

$('span').click(function(e) { 
    e.stopPropagation(); 

    $(this).parent().find('span').removeClass('active'); 
    $(this).toggleClass('active'); 
}); 

$('div').click(function() { 
    $(this).find('span').removeClass('active'); 
}); 

DEMO:http://jsfiddle.net/WP4RH/1/

0

不綁定一個單擊處理程序內單擊處理程序,只需檢查目標是div或單擊處理,而不是內部的跨度。此外,加入activethis時,只是將其刪除任何同級跨度:

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

$('div').on('click', function(e){       
    if (e.target == this) $('span').removeClass('active');        
}); 

FIDDLE