2009-08-14 12 views
2

jQueryを使用してページロード時にdivを非表示にし、後でユーザーのやりとりに基づいて表示するウェブページがあります。SafariでJavaScriptエラーが発生した場合は、時々のみ

私の$(document).ready()では、これらのdivを非表示にして、これらのdivを表示するトリガ領域のjQueryからclick()ハンドラに関数をバインドするコードを実行します。後でスクリプトで使用されるHTMLからいくつかの値を取得します。後者が問題の原因です。

このコードは、FirefoxとChrome/Chromiumでうまく動作します(私たちはまだIE用のCSSで作業していますが、JSは私が理解できる限り動作します)。 Safariでは、時間の70%が完璧に動作します。しかし、いくつかのページがロードされるたびに、$(document).ready()の行にエラーが表示され、JSの実行が停止され、残りのページのHTMLの描画も停止されます。

行は次のとおりです。

var itemCount = document.getElementById('itemCount').innerHTML; 

Safariでデバッグコンソールには、 "NULL値" と言います。

<div id="itemCount" style="display:inline">0</div> 

、それは、このIDを持つ唯一のアイテムです

:事は(正しいのロードに失敗した後のページの「ソースの表示」から)私はHTMLに以下を参照してください、である(明らかに。)

ドキュメントが実際に準備が整う前に、何とかJSが実行されていると思っています。document.getElementById('itemCount')がnullを返し、それがある場合は少し待っているかどうかを試してみることを考えていましたが、わかりませんこれがうまくいくか、あまり醜い解決策があるかどうか。

私に何か明白なものがないか、何か別の方法で愚かなことを教えてください。

+0

のjQueryのバージョンは何ですあなたは使っていますか? –

+0

申し訳ありません - 1.3.2分 –

答えて

1

あなたのコードが書かれている方法から、私はそこにこれを引き起こしている他のエラーがあると思います。あなたの最初のコードブロックは次のようになります。

var itemCount = $('#itemCount').html(); 

...と第二:

<span id="itemCount">0</span> 

インラインで表示される<のdiv >セットは<スパン>です。 <スパン>がブロックレベル要素に設定されているのは<div>です。これが2つのタグがある唯一の理由です。それ以外は同じです。タスクには正しいものを使用してください。

これらの変更のいずれかがあなたの症状を変えることを期待していません。私はちょうどあなたのページに他の疑わしいことがあると思っています。それが本当に問題の原因です。ワイルドな推測:<スクリプト>のready()ハンドラを含むブロックをドキュメントの<ボディ>の下部に移動します。

Safari 4をまだ使用していない場合は、必ず行ってください。高度な設定で[開発]メニューをオンにし、ページを読み込む前に[開発]> [Webインスペクタを表示]と発声します。エラーがある場合、Safari 3よりも優れている理由を示します。

+0

を使用しています。私のスクリプトを無効にするよう促しました.JQueryとShadowBoxを有効にしたままですべてのスクリプトを無効にすると、問題は残っています。私のスクリプトに加えてShadowBoxとJQueryの両方を無効にすると、ページが常に正しく表示されます(私が知る限り)。 私はSafari 4をダウンロードしています - 私は、開発メニューが有効になっている3.xよりも優れたデバッガを持っていることに気付きませんでした。私はSafariをWebブラウジングに使用しません。 –

0

古いバグと思われます。 ticket 1319およびticket 4187を参照してください。いくつかの実験と:)このポストの99%を削除した後

- 修正dinamically魔法のように空のスタイルタグを追加する問題:

this potential workaroundを参照してください

(function(){ 
    if (!/WebKit/i.test(navigator.userAgent)) return; 
    var el = document.createElement("style"); 
    el.type = "text/css"; 
    el.media = "screen, projection"; 
    document.getElementsByTagName("head")[0].appendChild(el); 
    el.appendChild(document.createTextNode("_safari {}")); 
})(); 
関連する問題