0

ドロップダウン ボックスのスタイルを設定するために、JQuery プラグインcustomSelect() http://adam.co/lab/jquery/customselect/を使用しています。

同じ要素でスクリプトを複数回初期化すると、機能しなくなります。AJAX を介して DOM に挿入された、新しく作成された要素のプラグインのみを初期化する方法を見つける必要があります。

したがって、すべてのドロップダウンで初期化します(目的の効果)-

$('select').customSelect();

このプラグインが機能するように選択した要素には、「hasCustomSelect」のクラスが与えられます。

<select class="hasCustomSelect"></select>

しかし、2回初期化すると-

$('select').customSelect();
$('select').customSelect();

文字通り機能しなくなります。

したがって、私のAJAXリクエストでは、そのクラスなしで要素を初期化していますが、機能していないようです。ここにAJAXがあります -

$.ajax({
    type: 'POST',
    url: 'wp-content/themes/themetitle/functions/get-child.php',
    data: { childID : theID, URL : theURL, classlevel : classlevel },
        beforeSend:function() {

        },
        success:function(data) {
            $('#makesort').append(data); 
            makesort(); 
            $.each('select', function() {
                if( $(this).hasClass('hasCustomSelect') ) {
                    //DO NOTHING!  
                } else {
                    $(this).customSelect(); 
                }
            });
        },
        error:function() {

        }   
    }); 

したがって、私が考えたのは、dataが my に追加された後、div<select>要素を調べて、既に class が含まれているかどうかを判断し、含まれていhasCustomSelectない場合は、この要素のプラグインを初期化することです。

ただし、これは望ましい効果がないように見えますが、実際にはエラーが発生しています。プラグインが既に適用されているかどうかを確認する方法はいくつかあると思いますが、追加されているデフォルトのクラスがあるかどうかを確認するだけで十分だと思いました。

4

1 に答える 1

1

あなたのそれぞれのためにこれを試してください:

$('select:not(.hasCustomSelect)').each(function() {
    $(this).customSelect(); 
});

また...

$.each($('select:not(.hasCustomSelect)'), function() {
    $(this).customSelect();
});

エラーが発生する理由は、最初のパラメーター$.each(...がオブジェクトのコレクションであり、セレクターではないためです。

于 2013-10-21T18:56:07.850 に答える