• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:thisに関して)

JavaScriptでショップシステムを作成しているが、buttonが反応しない問題について

このQ&Aのポイント
  • JavaScript初心者がショップシステム作成中。buttonが反応せず困っている。
  • buttonをクリックしても商品が追加されず、thisやparentNodeに問題がある可能性。
  • 解説サイトを探している。引き続き助言を求める。

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

  • ベストアンサー
  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.3

function内で、alert(this)としてみれば[Object]とか[Object Window]とか返ってくると思いますが… ついでに、 var key, m=''; for (key in this) m += ', ' + key; alert(m); などとしてみると、ブラウザによって返ってくる内容がかわります。 とりあえずの(簡単な)対処としては、呼び出し側で  onClick="addToCart(this)" としておいて         (↑このthisは要素になる) function addToCart(elm) { var cartEl = document.getElementById("cart"); cartEl.appendChild(elm.parentNode); } とすれば、その要素が移動します。 移動させずに(もとの要素を残したまま)、複製を作りたいのであれば、 function addToCart(elm) { var cartEl = document.getElementById("cart"); cartEl.appendChild(elm.parentNode.cloneNode(true)); } みたいな感じ。 イベントをaddEventListenerなどで登録すれば、イベントハンドラーを取得できるので、#2様がご提示の方法で要素を取得することが可能です。(このあたり、IEと他のブラウザで仕様が違う)

amcars
質問者

お礼

回答有り難うございます。 問題なく動きました。なるほど、因数に渡せばよいのですね。。完全に予想外です。 cloneNode(true)も使う所が有りそうなので、メモしときますね。 助かりました。

その他の回答 (2)

  • yyr446
  • ベストアンサー率65% (870/1330)
回答No.2

×var productDiv = this.parentNode; 間違いです。 クリックされた要素の親は、 function addToCart(e) { var cartEl = document.getElementById("cart"); //  var productDiv = this.parentNode; var t= (e.srcElement || e.target); var productDiv =t.parentNode; cartEl.appendChild(productDiv); } となります。 あと、 <div id="cart"> </div> の中身はクリックする前に出来上がってないとだめです。 良い解説サイトが有れば教えて下さい。 =>ここです。

参考URL:
http://oshiete1.goo.ne.jp/c254.html
amcars
質問者

お礼

素早い回答有り難うございます。 srcElementなんてプロパティが有る事は知らなかったです。。 確かにここが一番早く解決します。また、質問すると思うのでその時はお願いします。

noname#111181
noname#111181
回答No.1

thisではなく、 var productDiv = document.getElementById("cart").parentNode; ではないでしょうか。 また、これで取得される parentNode は <body>タグになりますよ。