1

divで動作するjquery-uiタブ機能を取得する必要があります。div は他のいくつかの要素の中にあります。これは、リーフレット マップのポップアップ マーカーにバインドされた html です。

これが私が使用しているhtmlです。 次の図でわかるように、この html が機能することはわかっています。

これが問題の写真です。上部の div とポップアップの div の両方の html は同じです。

また、私のスクリプトは次のように呼び出されます。

$(window).load(function() {
    $( ".detail-popup-info" ).tabs();
});

実際の DOM が呼び出される前に終了しているかどうかわからなかったので、そうしましたが、実際には役に立たなかったようです。この問題は、他の多くのプロパティを継承することに関係していると思いますか? css のプロパティを調べると、まったく異なって見えます。

私が推測しているトップ div は、html ページでハード定義したため、何も継承しません。ポップアップ内のもう 1 つの div は、文字列として関数に送信され、おそらくシャッフルされます。

ポップアップエラー

壊れたもののcssプロパティは次のとおりです。

background-color: rgb(255, 255, 255);
cursor: auto;
font-family: "Helvetica Neue",Arial,Helvetica,sans-serif;
font-size: 12px;
font-size-adjust: none;
font-stretch: normal;
font-style: normal;
font-variant: normal;
font-weight: 400;
height: 100px;
line-height: 16.8px;
text-align: left;
width: 200px;
-moz-font-feature-settings: normal;
-moz-font-language-override: normal;

作業中のcssプロパティは次のとおりです。

background-attachment: scroll;
background-clip: border-box;
background-color: rgb(255, 255, 255);
background-image: url("http://localhost:3001/stylesheets/images/ui-bg_flat_75_ffffff_40x100.png");
background-origin: padding-box;
background-position: 50% 50%;
background-repeat: repeat-x;
background-size: auto auto;
border-bottom-color: rgb(170, 170, 170);
border-bottom-left-radius: 4px;
border-bottom-right-radius: 4px;
border-bottom-style: solid;
border-bottom-width: 1px;
border-image-outset: 0 0 0 0;
border-image-repeat: stretch stretch;
border-image-slice: 100% 100% 100% 100%;
border-image-source: none;
border-image-width: 1 1 1 1;
border-left-color: rgb(170, 170, 170);
border-left-style: solid;
border-left-width: 1px;
border-right-color: rgb(170, 170, 170);
border-right-style: solid;
border-right-width: 1px;
border-top-color: rgb(170, 170, 170);
border-top-left-radius: 4px;
border-top-right-radius: 4px;
border-top-style: solid;
border-top-width: 1px;
color: rgb(34, 34, 34);
font-family: Verdana,Arial,sans-serif;
font-size: 9.6px;
height: 100px;
padding-bottom: 1.91667px;
padding-left: 1.91667px;
padding-right: 1.91667px;
padding-top: 1.91667px;
position: relative;
width: 200px;
-moz-border-bottom-colors: none;
-moz-border-left-colors: none;
-moz-border-right-colors: none;
-moz-border-top-colors: none;

それは奇妙な部分だと思います。機能しているものには、壊れたものよりも多くの css プロパティがあります。たぶん、jquery-uiはいくつかの追加のプロパティを適用して機能させますが、何らかの理由でそれらをポップアップ div に適用していませんか?

アップデート

したがって、jquery は実際にはポップアップ内の div を見つけられないことが判明したと思います。これは、ポップアップが開かれたり閉じられたりするたびに、それらが動的に追加されたり、DOM から削除されたりするためです。これは、ポップアップが開かれていない html の写真です。通常、それらleaflet-popup-paneは空である の下にあります。

たぶん、作業中の css プロパティをハードコピーして、ポップアップ div に手動で適用する必要があります。

ここに画像の説明を入力

更新 2

ポップアップhtmlがDOMに存在しないためであることを確認しました。jquery-ui tabs() 関数を実行しsetTimeoutてすぐに開くと、正しくスタイル設定されました。
しかし、一度閉じて再度開くと、また消えてしまいます。

4

1 に答える 1

1

$( ".detail-popup-info" ).tabs();ポップアップ ウィンドウをトリガーするのと同じイベント ハンドラー内で タブの初期化をトリガーします。

それを行うload()ということは、ページのリソースが完全にロードされた後に1回チェックすることを意味し、.detail-popup-infoまだ存在しない場合(AJAXまたはユーザーがポップアップウィンドウを開くアクションを実行したときに何かによって追加されるため)、何もありません初期化します。

代わりに、ポップアップ コンテンツが DOM に追加された後にチェックする必要があります。たとえば、ボタンをクリックしてポップアップを作成する場合、次のようになります。

$('a.popup-button').on('click', function() {
    // ajax call or whatever that inserts the pop-up content
    $( ".detail-popup-info" ).tabs();
});

事前にパッケージ化された jQuery プラグインを使用してポップアップを作成している場合、ポップアップが作成/初期化された後に関数コールバックのオプションがある場合もあります。その場合は.tabs()、そこに呼び出しを入れます。

編集:popupopen Leaflet.js のドキュメントを見てみましたが、これにはイベントを使用できるはずです:

$(document).ready(function() {
    map.on('popupopen', function() {
        $( ".detail-popup-info" ).tabs();
    });
}

私はそれを入れましたdocument.readyが、マップを初期化するコードがある場所の直後に置く必要があります (ドキュメントの初期化コードの例は ですvar map = L.map('map').setView([51.505, -0.09], 13);)。

于 2013-08-01T17:21:22.427 に答える