3

関数を onclick-event にアタッチしたいリンクを含む html ページがあります。もちろん、それを行う1つの方法は次のとおりです。

<a href="save.php" onclick="save(); return false;" rel="save">Save</a>

しかし、これがベストプラクティスではないことはわかっています。その代わりに、window.onload を待ち、リンクをループして、rel="save" を使用して保存機能をリンクにアタッチします。これに関する問題は、ページ全体の読み込みが完了するまで待機することです。これは、リンクが表示されてクリック可能になってから数秒かかる場合があります。

これを行う別の方法はありますか?html で onclick を回避すると、リンクがレンダリングされるとすぐに機能します。

4

6 に答える 6

3

Internet Explorer には、deferと呼ばれる <script> タグ用の便利な属性があります。ドキュメントの読み込みが完了するまで、スクリプトの解析を遅らせるためのものです。それをサポートする他のブラウザーの場合は、他の誰かが提案したように DOMContentLoaded を使用できます。また、どちらもサポートしていないブラウザーの場合は、onload にフォールバックできます。

<script type="text/javascript" defer>
//- Run this code when the DOM parsing has completed
</script>

「DOMContentLoaded defer」をGoogleで簡単に検索したところ、次のページが役に立ちました。

http://tanny.ica.com/ica/tko/tkoblog.nsf/dx/domcontentloaded-event-for-browsers

于 2009-07-20T14:40:35.073 に答える
1

DOMContentLoadedの代わりにイベントを試すことができloadます。IE は、DOM がロードされるまで実行を延期する script タグの defer 属性も提供します。それらがうまくいかない場合は、私の知る限り、あなたが言及した解決策にこだわっています。

于 2009-07-20T14:20:57.630 に答える
1

あなたの場合、そのままにしておくことができます。一般的なベスト プラクティスではない場合でも、可能な限り単純なものに固執してください。

于 2009-07-20T14:24:06.923 に答える
0

これはどう?

<a href="javascript:void(save());">Save</a>

注: このソリューションでは、ユーザーが Javascript を有効にする必要があります。正確にはベスト プラクティスではありませんが、シナリオに適している場合があります。

于 2009-07-20T14:45:46.280 に答える
0

ここでの理想は、控えめな Javascript のアイデアを使用することです。

このように、Javascript がロードされていない場合でも、リンクは何かを行います。それはリンクですよね、それでユーザーを別のコンテンツに誘導しますか?- これは Javascript がなくても動作するはずです。また、リンクに添付された機能が Javascript でのみ機能する場合は、Javascriptを使用してそれらを作成し、DOM に挿入する必要があります(存在しない場合はクリックできません...)。

(それ以外の場合は、クリック イベントをラッパー要素に委任するのはどうですか?要素が完了する前に機能しますか?)

編集:ああ、「保存」は、リンクではなくフォームのボタンであるように聞こえます。ただし、目立たないJSのものは引き続き適用されます。

于 2009-07-20T15:11:36.533 に答える
0

これがソリューションに適しているかどうかはわかりませんが、変更が必要なリンクを含むスクリプトをすぐ下に挿入できます。このスクリプトは関数にラップされないため、ブラウザーは表示されたときにすぐに実行できます。その結果、ページ全体が読み込まれる前にスクリプトを実行して、実行中のスクリプトの上にあるアイテムのみを変更できます。(スクリプトの下にあるものを参照すると、失敗します。)

ところで、これはほぼ確実にベスト プラクティスではなく、ワースト プラクティスと呼ぶ人もいるでしょう。

于 2009-07-20T14:24:33.147 に答える