2

jQueryツールを使用して、サイトにいくつかのオーバーレイフォームとダイアログボックスを設定しています。彼らはこれまでうまく機能してきましたが、私のサイトへの変更はいくつかの問題を引き起こしています:

オーバーレイを含むページで、ページに新しいアイテムを追加するために、いくつかのぎこちない作業を行っています。それらのアイテムの1つには、ページ上の他のアイテムと同じように、それ自体がオーバーレイをトリガーしてフォームを表示することを目的としたリンクが含まれています。ページへのアイテムの追加は正しく機能していますが、そのアイテムのリンクはオーバーレイのフォームを開きません。むしろ、別のページで開かれます。ページを更新すると、新しいアイテムが表示され、そのリンクがオーバーレイで正しく開きます。

私の疑惑は、アイテムをページに追加するだけでは十分ではないということです。つまり、jQueryやjQuery Toolsなどを突く必要があるため、新しいアイテムのリンクをオーバーレイに接続する内部的なものがセットアップされます。これは、ページがリロードされたときに発生すると思います。これは、「新しい」アイテムがその時点でページ上の別のコンテンツであるためですが、ajax呼び出しでは発生していません。これは、に何かを挿入するだけだからです。ページのDOM。

私はここにいますか?(私がいる場合)、これらの接続を確立するためにjQueryまたはツールで何を突いたり蹴ったりする必要があるかを誰かが知っていますか?「アクティブ化」や「初期化」などの名前のAPI呼び出しを探していましたが、運が悪かったのですが...ありがとうございます。

4

1 に答える 1

1

ajax を追加した html リンクは次のようになっていると思います。

<a href="external-content.htm" rel="#overlay">Do It</a>

そして、ページのどこかに次のような JavaScript があります。

$('a[rel]').overlay({ 
   /* your options here */
});

ここに示す JavaScript は、属性aを定義するすべての要素にオーバーレイ プラグインを見つけて適用するだけです。rel典型的なページ (jquery のようなものを使用) では、html がロードされたdocument.ready()に javascript が実行されるため、すべてが正常に機能します。

ここでの問題は、JavaScript が既に実行された後に ajax 操作が新しいリンクをページに追加するため、オーバーレイ プラグインが ajax が追加されたリンクに添付されないことです。また、オーバーレイ機能が強化されていない場合、リンクは通常の html リンクのように機能し、新しいウィンドウで外部ページが開きます。

解決策は、ajax 関数の完了に JavaScript を再度実行することです。jQuery.ajaxajax リクエストを実行するために使用していると仮定するとsuccess、オブジェクトにハンドラーを提供しsettings、その中で上記のようにオーバーレイ JavaScript プラグインを再実行するだけです。


編集:これは、オーバーレイ プラグインをページ内のすべてのリンクに適用するため、最も効率的なソリューションではないことに注意してください。もちろん、より具体的なセレクターを使用して、追加したばかりのリンクのみをターゲットにすることもできますが、ほとんどのアプリケーションでは、すべてに再度適用するだけで問題ありません。

于 2011-02-20T21:23:16.543 に答える