3

ページを実行すると、getElementById呼び出しが要素を検出する場合と、検出しない場合があります。間違いなくタイミングの問題。これはIE9でのみ発生し、IE互換モード(7または8)では発生しません。また、他のブラウザー(Firefox、Opera、Safari、およびChrome)でも発生しません。フィドルに収まるようにページを削除してサンドボックス化すると、問題が解消されるため、フィドルを作成できません。私のgetElementByIdjavascript呼び出しは、ヘッドセクションにあります。これは、DOMの準備ができているか、ウィンドウのオンロードで待機しない限り、その時点で要素を見つけることができないことを理解しています。getElementById javascriptをjqueryの$(document).ready関数でラップしようとしましたが、効果がありませんでした。また、動作するはずだと思ったjqueryの$(window).load関数でラップしてみましたが、効果もありませんでした。

このwindow.onloadソリューション(addLoadEvent)で要素を待機しようとすると、tiが機能してそれを見つけます。では、jqueryのdocument.readyまたはwindow.load APIを使用しないのはなぜですか?

スクリプトが参照するタグのhtmlの後にあるページでスクリプトを下に移動しようとしましたが、問題が引き続き発生し、要素が見つからなかったため、効果はありませんでした。私も最後まで動かしましたが、効果もありません。javascriptを最後に移動すると、それらの要素が使用可能になる(または私が読んだ)と思ったので、この特定の結果に混乱しますが、そうではないように見えます。なぜこれなのか誰もが知っていますか?

先ほど、IE9でのみ発生していることを説明しました。さらに、通常、最初のページの読み込み時にのみ問題が発生し、ページを更新すると問題が解消されます。おそらくキャッシングが原因だと思います。

私はasp.net4.0を使用していますが、それが重要であるというわけではありません(またはそう思います)。javascriptは、セクションのhtmlセクションの上の.aspxページにあり、外部jsファイルにはありません。念のため外部ファイルに移動してみましたが、期待通りの効果はありませんでした。

したがって、要約すると、

  1. jquery APIが機能しないのはなぜですか?と
  2. JavaScriptをページの下(または最後)に移動しなかったのはなぜですか?

頭の中のJavascriptの抜粋:

//        addLoadEvent(setupstuff);

//        function addLoadEvent(func)
//        {
//            var oldonload = window.onload;

//            if (typeof window.onload != 'function')
//            {
//                window.onload = func;
//            }
//            else
//            {
//                window.onload = function ()
//                {
//                    if (oldonload)
//                    {
//                        oldonload();
//                    }
//                    func();
//                };
//            }
//        }

    var txtLocation = '<%=txtLocation.ClientID%>';

    // JQuery plugin - JQueryLive (waits for element)
    $('#' + txtLocation).livequery(function ()
    {
        setupstuff();
    });


    //$(document).ready(function () //didn't work
    //$(window).load(function() //didn't work
    function setupstuff()
    {
        // search text watermark toggling
        var hasWatermark = $('#' + txtLocation).hasClass('txtLocationWatermark');

        var searchText;
        if (document.getElementById(txtLocation))
        {
            searchText = document.getElementById(txtLocation).value;
        }
        else
        {
            alert('Element ' + txtLocation + ' not found in DOM!');
            return;
        }
        //var searchText = $('#' + txtLocation).val(); //doesn't work either
4

1 に答える 1

0

最新バージョンのjQueryにアップグレードすると、リリースノートに記載されている.ready()関数の以前のバージョン(jQuery 1.7。?)の1つにバグがあったため、これが修正されます。

于 2012-12-14T00:55:21.483 に答える