• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:jqueryで、○○ is undefind)

jQueryで○○ is undefind

このQ&Aのポイント
  • WEBページを作成中です。あるエリアのリンクをマウスオーバーすると、関連の深いエリアへのリンクもハイライトする方法について、jQueryを使用して実装しようとしています。
  • しかし、実装したコードの中で「this.product is undefined」というエラーが発生し、正しく動作しません。コードのコメントにした部分を表示すると、urlをalertすることはできているので、一部の機能は正常に動作しているようです。
  • エラーの原因を特定し、問題を解決するために、間違いをご指摘いただけると助かります。

質問者が選んだベストアンサー

  • ベストアンサー
回答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'); }); こんなカンジです

pyon-yon
質問者

お礼

ありがとうございました。バッチリでした。そういえば、この位置に二つの引数を書く構文をある本で見たことがあり、「何でここにこんあのがあるんだ?jquery特有の書き方か?」なんて思っていたヤツでした^^ ちなみに「ind」は書いておくだけで今回は使いませんね。 従来は、長々と個々の場合毎に書いて動作させていたスクリプトがオブジェクト(連想配列)で簡潔に書けてよかったし、別の構想でも応用できそうなので、よいステップになりました。 ありがとうございました。

その他の回答 (1)

  • fujillin
  • ベストアンサー率61% (1594/2576)
回答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)); });

pyon-yon
質問者

お礼

ありがとうございました。順番が行き違いになってしまいましたが、fujillinさんの方法でも見事に動作しました。javascriptらしい記述方法ですね!勉強になります。 教えて頂きたいのは、 [f?"addClass":"removeClass"]("linkage"); は見慣れない記述です。 f? というのと ("linkage")をこの位置に書く方法は初めて見る感じです。 今後の為に補足いただければ有難いです。よろしくお願いいたします。

関連するQ&A