0

私はこのコードを持っています:

$('.ui-datepicker-calendar tr').live('mouseleave', function() { 
    $(this).find('td a').removeClass('ui-state-hover'); 
});

これは、ページ上のすべての日付ピッカーに影響します。特定の日付ピッカーをターゲットにしたいので、次のようにします。

var specificPicker = $(this).datepicker("widget");

私はそれからやりたい:

$(specificPicker).find('.ui-datepicker-calendar tr').live('mouseleave', function() { 
    $(this).find('td a').removeClass('ui-state-hover'); 
});

ただし、live()連鎖はサポートしていません。

ドキュメンテーションによると、これlive()は非推奨であり、使用する必要がありますon()が、呼び出しの 2 つの方法のいずれかを の代わりに置き換えると.on.live機能しません。

どうすればこれを機能させることができますか?

4

3 に答える 3

1

動作のせいでそれはできません.live()。イベントをドキュメント自体に添付し、イベントの元の要素が、$('...')を呼び出す直前に使用されたセレクターと一致するかどうかを確認します.live()

正しい使用方法.on()は次のとおりです。

$('existing-element-selector')
    .on('mouseleave', '.dynamic-element-selector', callbackFunction);

あなたの場合、それはこれでしょう:

$(specificPicker).on('mouseleave', '.ui-datepicker-calendar tr', function() {
    // ...
});
于 2012-10-18T12:08:30.490 に答える
0

で置き換えることは、検索と置換の操作.live()ではありません。.on()

これを変更する必要があります:

$("selector").live("event", handler);

これに:

$("base-selector").on("event", "descendant-selector", handler);

との値はbase-selector、最初の;descendant-selectorから導出する必要があります。ストレートアップ変換の場合は、 asをselector使用documentbase-selectorて設定できます。descendant-selectorselector

したがって、これと同じ動作を実現するには、次のようにします。

$(specificPicker).find('.ui-datepicker-calendar tr')
.live('mouseleave', function() { 
    $(this).find('td a').removeClass('ui-state-hover'); 
});

これを行う:

$(specificPicker).on("mouseleave", '.ui-datepicker-calendar tr', function() { 
    $(this).find('td a').removeClass('ui-state-hover'); 
});
于 2012-10-18T12:08:52.023 に答える
0

使用している jQuery のバージョンに固執する場合、したがって の使用に固執する場合はlive()、これを試してください...

$(specificPicker).find('.ui-datepicker-calendar tr').each(function() {
    $(this).live('mouseleave', function() {
        $(this).find('td a').removeClass('ui-state-hover');
    });
});

each()選択した要素を解析し、イベント ハンドラーをそれらにアタッチするために使用するだけです。

于 2012-10-18T12:10:54.860 に答える