2009-03-17 8 views
2

Ruby on Railsアプリケーションを作成しています。次のjQueryコードは、サイトのすべてのページのテンプレートであるindex.html.erbファイルのheadタグに含まれています。JQueryが#idセレクタを認識していない、URLに依存しているようです

<script> 
    $(document).ready(function() { 
    $("#select_mailshot").click(function() { 
     alert('mailshot'); 
     document.location.href = "/products/1"; 
    }); 
    $("#select_blog").click(function() { 
     alert('blog'); 
     document.location.href = "/messages"; 
    }); 
    $("#select_contact").click(function() { 
     alert('contact'); 
     document.location.href = "/contacts/1"; 
    }); 
    }); 
</script> 

(警告ステップは、デバッグのためにそこにある)

index.html.erb

<ul> 
    <li id="select_mailshot">Mailshot</li> 
    <li id="select_blog">Blog</li> 
    <li id="select_contact">Contact us</li> 
</ul> 

に次のHTMLコードの意図は、これは効果的に3つのボタンを作成することです。

http://myurl.com/からいずれかのボタンをクリックするとすべて動作します。

http://myurl.com/messagesからいずれかのボタンをクリックする(中央のボタンを経由してこれに取得する)すべての停止が働いhttp://myurl.com/products/1からそれを起動すると、それはすべて(アラートがトリガされません)

に動作します。実際にはhttp://myurl.com/anything/idから開始すると動作を停止します。

私はこれを数時間にわたって解決しようと努めてきましたが、作業条件と非作業条件の唯一の違いは、私が見る限りではURLです。

ここで何が起こっているのか誰にも分かりますか?

+0

どのコンソールエラー? – cherouvim

答えて

4

ファイヤーバグはあなたに何を伝えますか?あなたはページにjavascriptエラーがありますか?もしそうなら、彼らは何ですか? jQueryライブラリが深いページに正しく含まれていることを確認してください(つまり相対パスですか?)

+0

エラーログを確認するのは明らかなステップでした。jqueryライブラリは相対的であり、正しくは含まれていませんでした。 –

+0

私の喜びです。私はちょうど数日前に同じ問題を見ていました。 – digitaljoel

1

これはJavaScriptがインライン化されていますか?

もしそうでなければ、リンクは相対的なので、メッセージ/ 40からロードしようとすると../script.jsが必要です。別の解決策は、絶対URL(http://myurl/script.js)または仮想(/script.js)を使用することです。

+0

javascriptはインライン展開されていますが、jQueryへのリンクは相対的です。ヒントのおかげで –

0

cherouvimとdigitaljoelのおかげです。

これは、javascriptファイルが現在のURLを基準にして含まれていたためです。

以下

がヘッドタグ

<script type="text/javascript" src="javascripts/jquery-1.3.2.js"></script> 

に含まれていた私は(注意して余分な「/」src属性で)

<script type="text/javascript" src="/javascripts/jquery-1.3.2.js"></script> 

にそれを変更し、すべてが期待どおりに動作します。

サーバーとブラウザのエラーログを確認した後、これを実行しました。

少しばかげているけど、よく学んだレッスンを感じる。

0

私はFaceBoxを使用してモーダルオーバーレイを作成していましたが、なぜ同じ問題が発生しているのかわかりませんでした。

リスナーが表示されるまでHTML要素にアタッチされていないことがわかりました。 (ソースを見ればアイテムは利用可能でしたが、jQueryは可視になるまでリスナーを付けないようでした。)

同じ問題を抱えている人にとっては、あなたが接続しているHTML要素が表示されている場所にclick()コードを移動することをお勧めします。

また、IDで選択すると、クラスよりも多くの問題が発生することがわかりました。なぜ私は考えていない。 (いいえ、IDが重複していませんでした)

これは、同じ問題を抱えている人に役立ちます。

+0

更新:IDセレクタの問題は、FaceBoxの動作方法であることが判明しました。これはdiv要素を実際にコピーします。結局、重複したIDになってしまいます。 – nostromo

関連する問題