2016-07-15 8 views
1

私はtoggleClassと、このシンプルなjQueryのイベントがありますjQuery toggleClassコールバックの使い方は?

$(this).on("click", function() { 
    $(this).toggleClass("fa-stop-circle"); 
}); 

私はfa-stop-circleが追加された場合、いくつかのメソッドを呼び出すしたいと思います。このイベントをどのように監視できますか?

答えて

3

toggleClass()要素は次のように、すぐにtoggleClass()を呼び出した後、クラスを持っている場合しかし、あなたは確認することができ、コールバックを持っていない:

$(this).on("click", function() { 
    var $el = $(this).toggleClass("fa-stop-circle"); 
    if ($el.hasClass('fa-stop-circle')) { 
     // do something... 
    } 
}); 

Working example

+3

downvoterが明らかにこの動作を信じていないとして作業例を追加しました。 –

+3

私は、なぜそのような多くのdownvotes – deroccha

0

あなたが

あなたが作成し、毎回toggleClass()が実行され、このイベントに耳を傾けますカスタムイベントを発生機能を使用することができますトグル

$(this).on("click", function() { 
    var that = $(this); 
    that.toggleClass("fa-stop-circle"); 
    if (that.hasClass('fa-stop-circle')) { 
    // Execute your method 
    } 
}); 

UPDATE後if文を追加することができますあなたのメソッドを実行する。

/** 
 
* Custom class for toggling classes 
 
* @param $elem {jQuery object} 
 
* @param classes {array} 
 
*/ 
 
var customToggleClass = function($elem, classes) { 
 
    if ($elem && $elem instanceof jQuery) { 
 
    if (classes && classes.length > 0) {  
 
     if (classes.length == 1) { 
 
     $elem.toggleClass(classes[0]); 
 
     $(document).trigger('custom_toggleClass'); 
 
     } else if (classes.length == 2) { 
 
     $elem.toggleClass(classes[0], classes[1]); 
 
     $(document).trigger('custom_toggleClass'); 
 
     }  
 
    } 
 
    } 
 
} 
 

 
$(document).on('click', '#test', function() { 
 
    customToggleClass($('#test'), ['test_class_1', 'test_class_2']); 
 
}); 
 

 
$(document).on('custom_toggleClass', function() { 
 
    alert('Class changed!'); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script> 
 
<span id="test">Click me</span>

1

コンビナトで.done()を使用する必要がありますイオン。.promise()

約束は繰延オブジェクトを返します。

doneは、遅延オブジェクトが解決されたときにハンドラを追加します。

$(this).toggleClass("fa-stop-circle").promise().done(function() { 
    if ($this).hasClass("fa-stop-circle")) { 
     // your code 
    } 
}); 
+0

'toggleClass'は、durationプロパティを持つjQueryUIsバージョンを使用する場合にのみ非同期であることに驚いています。 OPが使用するバージョンは非同期ではありません。 –

0

以下のコードが有効です。 promise()メソッドを使用し、bindそれを.done()にすることができます。

$(this).on("click", function() { 
    $(this).toggleClass("fa-stop-circle").promise().done(function(){ 
     //call your method here 
    }); 
}); 
関連する問題