5

表示または非表示になっている要素をリッスンする方法はありますか?

要素が非表示から表示に変わるときはいつでも、新しく表示された要素内の最初の入力要素にフォーカスを置きたいと思います

クリック イベントをすべてにアタッチし、ドキュメントの上部に配置することを考えました。それは何よりも先にトリガーされ、クリックされた要素next("div")(または何か) の css 表示プロパティが であるかどうかを追跡noneし、小さなタイムアウトを設定することができました。 、次にフォーカスを設定しますが、undefinedそのCSSプロパティにアクセスしようとすると取得します

$("html").on("click", "body", function(){
   alert($(this).next("div").css("display")); //undefined
});

これを行う方法はありますか?

4

3 に答える 3

3

このようなことを試すことができます (ハックのようなものです)。jQuery で css/show/hide/toggle プロトタイプにモンキー パッチを適用すると:hidden、「ティック」後に要素の属性が変更されるかどうかをテストできます (私は 4ms を使用しました)。表示されている場合は、可視性が変更されています。これは、アニメーションなどでは期待どおりに機能しない可能性がありますが、それ以外の場合は正常に機能するはずです。

デモ: http://jsfiddle.net/Bh6dA/

$.each(['show','hide','css','toggle'], function(i, fn) {
    var o = $.fn[fn];
    $.fn[fn] = function() {
        this.each(function() {
            var $this = $(this),
                isHidden = $this.is(':hidden');
            setTimeout(function() {
                if( isHidden !== $this.is(':hidden') ) {
                    $this.trigger('showhide', isHidden);
                }
            },4);
        });
        return o.apply(this, arguments);
    };   
})

さて、showhideイベントを聞くだけです:

$('div').on('showhide', function(e, visible) {
    if ( visible ) {
        $(this).find('input:first').focus();
    }
});

多田!

PS: モンキーパッチが大好きです

于 2013-10-04T15:19:30.367 に答える