![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
WEBページを作成中です。あるエリア(例id="sub")のリンクをマウスオーバーすると、そこと関連の深いエリアへのリンク(例id="main"内のリンク)もハイライトする、といったことをやりたいので、
下記のようなコードを書きました。が、sub内リンクに触ると、
「this.product is undefined」となり、思うような動きになりません。
jsコード中にコメントにした部分を生かして表示すると、一応urlをalertするので、いいところまでは行っているように思うのですが。。。どなたか間違いをご指摘くださると助かります。よろしくお願いします。
`
<html>
<head>
<title>TEST</title>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7. …
<script type="text/javascript">
jQuery(function(){
//○○技術コンテンツ(グローバルナビを含む)にマウスオーバー⇒□□製品コンテンツがハイライト
var tech_product = [
{tech:jQuery('a[href *="abcd"]'), product:jQuery('#main a[href *="ABCD"]')},
{tech:jQuery('a[href *="efgh"]'), product:jQuery('#main a[href *="EFGH"]')},
{tech:jQuery('a[href *="ijkl"]'), product:jQuery('#main a[href *="IJKL"]')},
{tech:jQuery('a[href *="mnop"]'), product:jQuery('#main a[href *="MNOP"]')},
{tech:jQuery('a[href *="qrst"]'), product:jQuery('#main a[href *="QRST"]')}
];
jQuery.each(tech_product, function() {
//alert(tech_product[2].tech[0].href);
this.tech.hover(function() {
this.product.addClass('linkage');
}, function() {
this.product.removeClass('linkage');
});
});
});
</script>
</head>
<body>
<div id="sub">
<ul><li><a href="abcd/contents.html">abcdへ</a></li><li><a href="efgh/contents.html">efghへ</a></li><li><a href="ijkl/contents.html">ijklへ</a></li>
<li><a href="mnop/contents.html">MNOPへ</a></li><li><a href="qrst/contents.html">qrstへ</a></li>
</ul>
</dv>
<div id="main">
<ul><li><a href="ABCD/contents.html">ABCDも関係あるよ</a></li><li><a href="EFGH/contents.html">EFGHも関係あるよ</a></li><li><a href="IJKL/contents.html">IJKLも関係あるよ</a></li>
<li><a href="MNOP/contents.html">MNOPも関係あるよ</a></li><li><a href="QRST/contents.html">QRSTも関係あるよ</a></li>
</ul>
</div>
</body>
</html>
`
No.2ベストアンサー
- 回答日時:
普通のeach()と違って、$.each(obj,fn)はthisに値はいらないです
代わりにコールバックの第2引数に値が入ります
jQuery.each(tech_product, function(ind,val) {
val.tech.hover(function() {
val.product.addClass('linkage');
}, function() {
val.product.removeClass('linkage');
});
こんなカンジです
ありがとうございました。バッチリでした。そういえば、この位置に二つの引数を書く構文をある本で見たことがあり、「何でここにこんあのがあるんだ?jquery特有の書き方か?」なんて思っていたヤツでした^^
ちなみに「ind」は書いておくだけで今回は使いませんね。
従来は、長々と個々の場合毎に書いて動作させていたスクリプトがオブジェクト(連想配列)で簡潔に書けてよかったし、別の構想でも応用できそうなので、よいステップになりました。
ありがとうございました。
No.1
- 回答日時:
>jQuery.each(tech_product, function(){
> this.tech.hover( function(){}, function(){} )
>});
の部分で最初のthisはtech_productの要素を示していますが、hover()内の無名関数内ではthisはhoverの起こった要素になっているはずなので、ご希望の動作をしないのではないでしょうか?
これを回避するには、イベント設定時に変数の内容を確定させておけばよろしいかと思います。
例えば、後半の部分を以下のようにするとか。
(他にもいろいろな方法があると思います。)
var set_class = function(elm, f){
return function(){ elm.product[f?"addClass":"removeClass"]("linkage"); }
}
jQuery.each(tech_product, function(){
this.tech.hover(set_class(this,1), set_class(this,0));
});
ありがとうございました。順番が行き違いになってしまいましたが、fujillinさんの方法でも見事に動作しました。javascriptらしい記述方法ですね!勉強になります。
教えて頂きたいのは、
[f?"addClass":"removeClass"]("linkage");
は見慣れない記述です。
f?
というのと
("linkage")をこの位置に書く方法は初めて見る感じです。
今後の為に補足いただければ有難いです。よろしくお願いいたします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript jqueryを使ったスムーススクロールのコードを書いたのですが、HTMLコード内にある、a butt 2 2022/04/14 10:59
- HTML・CSS 書籍を見つつサイト造りの練習をしているのですが、見た目が一致しません 2 2022/11/28 15:00
- HTML・CSS テキストを画面の真ん中に配置したいです。 2 2022/11/25 16:11
- PHP アコーディオンPHPが上手くいかない 3 2022/07/15 16:29
- HTML・CSS ヘッダーの画像にメインエリアがかぶってしまいます 1 2022/11/28 14:06
- HTML・CSS htmlについて質問です! 写真のように写真の部分が?になってしまいます。 ファイルもしっかり選べて 1 2023/07/09 21:17
- HTML・CSS HTML & CSS 縦ボックス内の文字の左右センタリング 3 2023/03/25 04:23
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/07 21:04
- PHP style.cssのjQuery条件付きcssが機能しない 4 2022/07/17 18:27
- HTML・CSS cssの display: flex;で横並びにならずに困ってます 1 2022/12/04 13:18
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「jQuery」アコーディオンメニ...
-
【javascript で動的に a タグ...
-
戻ってきた時ツリーメニューが...
-
JqueryFileTree.js でフォルダ...
-
クリックした<a>タグのみにClas...
-
階層式メニューの設置について
-
javascriptでEnterキーをtabキ...
-
Jquery タブで、4つのliのうち...
-
【JavaScript】階層関係から要...
-
for(var i=0;...) の i の値を...
-
javascriptで、jとlの打鍵でリ...
-
メニューのリンクをクリックし...
-
jqueryのsortableで一部ソート...
-
【jQuery】遅延実行(タイムラ...
-
【jQuery】 if else 文の合体
-
Jquery の slide.toggle で要素...
-
MAX関数を使ってからLEFT JOIN...
-
jspでcssが読み込めない
-
スクロール可能なチェックボックス
-
「戻る」「進む」ボタンで画像...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
jqueryのsortableで一部ソート...
-
クリックした<a>タグのみにClas...
-
どの<li><a> が押されたか判別...
-
【javascript で動的に a タグ...
-
文字と数字が混在する要素のsor...
-
javascriptでEnterキーをtabキ...
-
チェックボックスに入っている...
-
複数のラジオボタン項目でのテ...
-
jquery ドロップダウンメニュー...
-
jQueryのeqで最後からn番目以降...
-
JavaScriptで、?マークとコロ...
-
質問に答えていくと、回答によ...
-
Jqueryでリストのスクロール
-
多階層ドロップダウンのスマホ...
-
JQueryタブのアクティブ アン...
-
gridstack.jsについて教えてく...
-
タブ切り替えの初期表示について
-
オンマウスで画像ロールオーバ...
-
「jQuery」アコーディオンメニ...
-
複数の画像をランダム(シャッ...
おすすめ情報