4

jQueryを使用すると、ライブを使用してカスタムイベントを処理できるようになりました。これは、最新のプロジェクトで使用したもので、非常に便利です。私は制限/バグに直面しましたが、誰かが私を助けてくれることを望んでいます。

イベントをトリガーすると、次のように追加のデータ配列を渡すこともできます。

 $(this).trigger('custom', ['foo', 'bar' ]);

bindを使用しているだけの場合は、これらの変数に絶対にアクセスできます。ただし、ライブを使用している場合は、私が知る限り、データにアクセスできないことがわかります。私が間違っている?別の方法はありますか?

説明するデモコードは次のとおりです。

 $().ready(function() {

    $('button').click(function(){
        $('<li>Totally new one</li>').appendTo('ul');
    });

    $('li').bind('custom', function(e, data) {
        // this one works fine for old elements, but not for new ones
        $('#output1').text('Bind custom from #' + e.target.id + '; ' + data);
    }).live('custom', function(e, data) {
        // this one triggers for old and new elements, but data is useless
        $('#output2').text('Live custom from #' + e.target.id + '; ' + data);
    }).live('click', function(){
        $('div').text('');
        // just using click count to illustrate passing data in the trigger
        var clicks = $(this).data('clicks');
        if(typeof clicks == 'undefined') clicks = 1;
        $(this).trigger('custom', ['Times clicked: ' + clicks ]).data('clicks', clicks + 1);
    });
});

および関連するHTML:

<button>Add</button>
<ul>
    <li id="one">First Item</li>
    <li id="two">Second Item</li>
    <li id="three">Third Item</li>
</ul>
<div id="output1">Result 1</div>
<div id="output2">Result 2</div>
4

1 に答える 1

2

http://docs.jquery.com/Events/trigger#eventdataの最後の「代替」例で説明されている形式を使用するのが最も簡単な方法のようです。この例では、オブジェクト リテラルを使用して、カスタム プロパティを作成できるイベント オブジェクトを指定します。上記のアプローチも試してみましたが、役に立ちませんでしたが、別の形式がうまくいきました。だから電話する代わりに

$(this).trigger('custom', ['Times clicked: ' + clicks ])

試す

$(this).trigger({type:'custom', clicks: clicks});

次に、「カスタム」イベントのイベントハンドラーで次のように参照します。

"Times clicked: " + e.clicks;

それが役立つことを願っています!

于 2009-10-02T05:29:35.853 に答える