-2

私は目立たないJSとそれを生成する方法、およびそのすべてのジャズについてかなり読んだことがあります...

私の問題はこれです:私はに大きく依存しているウェブサイトを持っているmod_rewriteので、基本的にすべてのページリクエストが送信されindex.php、ページのメイン構造が生成され、適切なページが含まれます。現在、サイトにはさまざまなセクションがあり、各セクションではさまざまな Javascript 関数が使用されています (たとえば、さまざまな AJAX 要求に対して)。

onloadさて、ページごとに同じものを初期化する必要がないため、ページのに関数をアタッチしただけでは、明らかに機能しません...この状況を処理する最良の方法は何ですか?

状況が明確であることを願っています。必要に応じて喜んで明確にします

4

3 に答える 3

3

addEventListener補助PHPページによって生成されたHTMLで(標準)またはattachEventを使用できます。

構文は単純です。例えば

document.addEventListener("load", someFunction, false);

これにより、index.phpでフルボディタグを生成できますが、ページごとに異なるロードハンドラーを実行できます。また、同じ要素でこれを複数回使用できることにも注意してください。

于 2010-06-10T06:37:43.670 に答える
1

.js ファイルに入れるだけです。

mysite_common.js - サイト全体で共通のユーティリティと関数

mysite_page_a.js - ページ a の固有の機能

mysite_page_b.js - ページ b の独自機能

ページbにはb.jsを含め、ページaにはa.jsを含めます

次に、それぞれの unique.js で、機能を ondomready などでラップできます。

PHP とは別にしておけば、あとで煩わしくなることはほとんどありません。また、js のキャッシュを利用して、ページの読み込みをスリムに保つことができることも意味します。

また、js 機能の一部をオンデマンドでロードするなど、はるかに複雑なことを実行できる YUI ローダーなども検討できます。

イベント委任を使用して、コンテキストに応じてさまざまな機能を提供できます。

基本的には、子要素のクリックをキャプチャするコンテナ要素にイベント リスナーをアタッチすることで機能します。その後、個々のイベント リスナーをまとめて削除したり、親からのヒントを確認したりできます。いう:

<div id='container' class='page_a'>
...
    <input name='somename'>
...
</div>

それで

var attachDelegates = function(container){
    container.onclick = function(e) {
    e = e || window.event;
    var t = e.target || e.srcElement;

    //Your logic follows
    if(t.name === 'somename'){
         dosomething(t);
    }
    if(t.className === 'someclass'){
         ... something else ...
    }
};

onload = function(){attachDelegates('container');};

attachDelegates 関数はページごとに異なる可能性があります。または、モノリシックなものと単純なヒントをコンテナーに添付するか、添付するクラスを選択することもできます。

これらは、より一貫した説明と例です:
http://cherny.com/webdev/70/javascript-event-delegation-and-event-hanlders
http://blog.andyhume.net/event-delegation-without-javascript-図書館

個人的にはYUI3 http://developer.yahoo.com/yui/3/examples/node/node-evt-delegation.htmlを使用しています

それは私にCSS3スタイルセレクターを与えてくれるので、これまでのところかなり手間がかかりません.

于 2010-06-10T09:11:50.650 に答える
1

ニコ、私は含まれている各ページでカスタム JavaScript コードを作成することをお勧めします (スクリプト タグをページのどこに含めてもかまいません)。マシューが提案したように、ページの読み込み時に実行する関数を定義した後、addEventListener 「ロード」時にそのカスタム関数をロード
する 含まれているドキュメントの本文のどこかに関数 pageinit() を定義するとしましょう

function pageinit(){..
}
window.addEventListener("load", function() { pageinit(); }, false); 

それはあなたのプロジェクトにとって意味がありますか?

于 2010-06-10T06:46:56.223 に答える