委任されたイベントの使用、つまり$(document).on("click.myButtons", "a.foo-button", ...
ハンドラーの使用に関する問題は、a 要素に直接関連付けられていません。つまり、1 つの a 要素からハンドラーを削除して、他の a 要素に残すことはできません。すべてのa要素からハンドラーを削除する必要があるかどうか。
あなたの場合、ハンドラーをa要素に直接リンクして、直接ハンドラーを使用する必要があります。次のコードは、あなたが達成したいことをしています:
$( function() {
myButtonsFunction = function(event){
// Do some stuff with event.data['foobar'],
console.log( event.data['foobar'] );
// Do some other stuff
// Remove handlers in the same container
$( event.target ).siblings( "a" ).addBack().off("click.myButtons", myButtonsFunction);
return false;
}
$( "a.foo-button" ).on("click.myButtons", {foobar: 123}, myButtonsFunction);
$( "a.bar-button" ).on("click.myButtons", {foobar: 456}, myButtonsFunction);
} );
ハンドラーはボタンに直接バインドされます。ボタンがクリックされると、クリックされたボタンと同じコンテナーにあるすべてのボタンからハンドラーが削除されます。
編集
以下のコードは、私が推測するように、意図した機能を反映しています。
$( function() {
myButtonsFunction = function(event){
// Do some stuff with event.data['foobar'],
console.log( event.data['foobar'] );
// Do some other stuff
$( event.target ).siblings( "a" ).addBack().each( function( i, elt ) {
$( elt ).removeClass( $( elt ).data( 'class' ) );
} );
return false;
}
$(document).on("click.myButtons", "a.foo-button", {foobar: 123}, myButtonsFunction);
$(document).on("click.myButtons", "a.bar-button", {foobar: 456}, myButtonsFunction);
} );
私が行ったことは次のとおりです。各リンク要素にデータ属性を追加しました。このデータ属性には、リンクがクリックされた場合にリンク要素から削除されるクラス名が含まれています。クラスがリンクから削除され、後でリンクがクリックされた場合、ハンドラーは呼び出されなくなります。
編集2
多分もっときちんとした解決策:
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script type="text/javascript">
$( function() {
myButtonsFunction = function(event){
// Do some stuff with event.data['foobar'],
console.log( event.data['foobar'] );
// Do some other stuff
$( event.target ).siblings( "a" ).addBack().removeAttr( 'data-delegate' );
return false;
}
$(document).on("click.myButtons", "a[data-delegate=foo]", {foobar: 123}, myButtonsFunction);
$(document).on("click.myButtons", "a[data-delegate=bar]", {foobar: 456}, myButtonsFunction);
} );
</script>
<li class="container">
<a href="#" class="foo-button" data-delegate="foo">Foo Button</a>
<a href="#" class="bar-button" data-delegate="bar">Bar Button</a>
</li>
<li class="container">
<a href="#" class="foo-button" data-delegate="foo">Foo Button</a>
<a href="#" class="bar-button" data-delegate="bar">Bar Button</a>
</li>
<li class="container">
<a href="#" class="foo-button" data-delegate="foo">Foo Button</a>
<a href="#" class="bar-button" data-delegate="bar">Bar Button</a>
</li>
これがさらに役立つことを願っています。