ページを実行すると、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ファイルにはありません。念のため外部ファイルに移動してみましたが、期待通りの効果はありませんでした。
したがって、要約すると、
- jquery APIが機能しないのはなぜですか?と
- 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