下記のように3つのバージョンがある場合、クリックするボタン要素やチェックするinputタグが別の物になるのですが、
両方バージョンを実行すると1と2が反応したり、こちらを実行したことになってしまう問題があります。
このような場合対象の要素だけを変更しないといけないですが、そのようなことはできるのでしょうか?
関数の呼び出し時に引数にID名を入れたりしても、対象の要素のみを変えることはできないですよね。
shoppingCalcの計算関数を定義。(バージョン1と両方バージョンで使う) shoppingGramの計算関数を定義。(バージョン2と両方バージョンで使う) //バージョン1 shoppingCalcの計算用の値を取得 let shoppingCalc = document.getElementById('shoppingBtn').onclick = () => { shoppingCalcの計算関数を呼び出す。 shoppingCalcの計算結果を表記。 }; //バージョン2 shoppingGramの計算用の値を取得 let shoppingGram = document.getElementById('shoppingBtn').onclick = () => { shoppingGramの計算関数を呼び出す。 shoppingGramの計算結果を表記。 }; //上記両方バージョン let getIdshoppingBtn= document.getElementById('shoppingAllBtn'); let shoppingCalcAll = getIdshoppingBtn.addEventListener('click', ()=> { shoppingCalcの計算関数を呼び出す。 shoppingGramの計算関数を呼び出す。 shoppingCalcの計算結果と、shoppingGramの計算結果を上記と別の所に表記 });
質問文から、具体的に「どういう動作」をすれば正しいのかが読み取れません。 「両方バージョン」ではどのような動作をさせたいのでしょうか。単純に「両方のイベントコールバックを実行する」だけでいいのでしょうか。
わかりにくくてすいません。もう少し具体的に記載しました。まだ必要な部分があれば教えてください。
getIdshoppingBtn や shoppingCalcGram など未定義のものがあるので、書かれている状況が再現するコード(HTML/JavaScript)を提示されたほうが回答を得やすいと思います。
足りない情報を追加しました。
他の方にも伝わるようにこちらにもコメントします。HTMLの方もお伝えしないと伝わりませんで失礼しました。 バージョン1 バージョン2 両方のバージョンが同じ値を使って計算し同じ場所に結果を表記するのであれば 仰る通りですが、 それぞれinputに入力するpriceやgramが独立していて、計算結果も、それぞれの場所に表記したい場合は、同じinputを参照したり、両方バージョンのボタンを押すとバージョン2にも結果が出てしまうと問題ですよね。 つまりそれぞれを分離独立させたいという事です。 その場合両方バージョンがバージョン1と2と同じ場所を参照しないようにして、 しかも始めの関数を再利用するためには、どのようにIDを取得すれば実現できますかという事をお聞きしたかったのです。 説明不足で大変恐縮ですが、同じ関数を使うが対象のID要素だけは変更するという事は実現できないので、 同じ関数を使うことを諦めて、バージョン数分同じ関数を記載してその中にあるID要素だけを変更する方法しかないでしょうか?
HTMLはどうなっていますか?
「情報を取ってくる」「表示する」はやはり対象の要素が違うので再利用はできず、 三つ分作らないといけないが、 「計算する」だけは共有できるのでここだけ関数にして再利用する方法があるという事ですね。 やはり違う要素を自動変換するようなことはできませんね。こちらが結論のようですね。理論上不可能であればそれでいいです。ありがとうございました。
回答2件
あなたの回答
tips
プレビュー