2016-03-04 52 views
1

我有這個按鈕,它將類從最大化改爲最小化。本來它有一個最大化的類,但點擊它變爲最小化。現在我想捕捉點擊最小化,只有最小化。jQuery:檢測一個不是原始類的改變的類名稱的點擊

看看下面我的代碼:

$('.button-maximize').off('click').on('click', function() { 
    $(this).removeClass('button-maximize').addClass('button-minimize'); 
}); 

因此,這將改變類,以儘量減少。很顯然,我需要事件代表團來抓住這個事件。

所以我接下來這麼做:

$('.button-wrap').off('click').on('click', '.button-minimize:not(.button-maximize)', function() { 
    alert('test'); 
}); 

爲了澄清button-wrap是父。所以我的問題是,這個警報('測試');當我第一次點擊最大化按鈕時觸發。我如何告訴jQuery我只想讓它觸發如果按鈕沒有類「按鈕 - 最大化」?

謝謝!

回答

1

只要使用單擊任一方式並檢查它。

$('.button-wrap').on('click', '.button-minimize, .button-maximize', function() { 
    if ($(this).hasClass('button-maximize')) { 
    $(this).removeClass('button-maximize').addClass('button-minimize'); 
    } else { 
    alert('test'); 
    } 
}); 

編輯評論回覆:這確實是基本相同的事情,但關鍵是事件被附加到包裝。

$('.button-wrap').on('click', '.button-maximize', function() { 
    $(this).removeClass('button-maximize').addClass('button-minimize'); 
}).on('click', '.button-minimize', function() { 
    alert('test'); 
}); 
+0

我發現你的解決方案最接近我所需要的,因爲它不會添加任何附加屬性並保持代碼非常乾淨。有沒有辦法修改我的代碼的方式來使其工作。這是出於好奇? – Nikolay

1

試試這個:

if(!$(this).hasClass("button-maximize")){ 
alert('test'); 
} 
1

你並不需要在同一按鈕兩個事件,你可以給你的按鈕標識id FPR exampel button-id然後附上點擊事件到它:

$(".button-wrap").on("click", "#button-id", function() { 
    if($(this).hasClass('button-minimize')){ 
     alert('test'); 
    }else{ 
     $(this).removeClass('button-maximize').addClass('button-minimize'); 
    } 
}); 

而且因爲按鈕在兩個類之間切換,您可以使用hasClass()方法檢查按鈕是否具有類button-minimize(男人沒有最大化類),然後顯示警報,否則刪除maximize並添加minimize

希望這會有所幫助。

1

有多種方法可以實現此目的。最簡單的方法可能看起來是這樣的:

https://jsfiddle.net/x4q3nwyL/1/

$('button').on('click', function() { 
    var $this = $(this); 
    if ($this.hasClass('maximize')) { 
     alert('test'); 
    } 
    $this.toggleClass('maximize minimize'); 
}); 

無需解除綁定。點擊後,你會檢查它是否是一個最大化按鈕,並做你的事情。之後,您將切換最小化和最大化類。這會導致它在每次點擊時在最小化和最大化按鈕之間切換。我想這就是你在...