[jquery]単一のコードを使用してすべてのブートンを作成する方法はありますか

受付中 プログラミング
2024-12-24
小次郎又三郎
学校のプロジェクトでは、ポロフォリオをコーディングしています。jQueryのhide()とshow()を使用して、ボタンをクリックした後にポップアップが表示されるようにしたい。 単一のコードで、id(id = popup1)に同じ番号のとclass="vignette"ショーid="bouton1"を含むすべてのHTML要素を作成する方法はありますか?divはっきりしているのかわからない、グラフィックデザインの学生で、楽しい時間を過ごしていません。
回答一覧
はい、それは可能です、そしてあなたが持っているコードを投稿するならば、あなたに良い答えを与えるのはより簡単でしょう
小次郎又三郎
idは一意であると想定されていますが、そうでない場合は問題が発生する可能性があります。しかし、それはそうでしょう$("#bouton1.vignette").show()。IDが一意ではないため、動作することを保証しません。
小次郎又三郎
介して追加される関数を作成できますaddEventListener。onclickまたは、クリックを処理するHTML要素に属性を追加することもできます。
        let activeDiv;
        
        function myClick() {
            if (activeDiv) activeDiv.classList.add("invisible");
            (activeDiv = document.getElementById(this.id.replace("bouton", "popup"))).classList.remove("invisible");
        }
        
        let buttons = document.getElementsByClassName("vignette");
        
        for (let button of buttons) {
            button.addEventListener("click", myClick);
        }
        
        .invisible {
            display: none;
        }
        
        <input type="button" id="bouton1" class="vignette" value="First">
        <input type="button" id="bouton2" class="vignette" value="Second">
        <input type="button" id="bouton3" class="vignette" value="Third">
        <input type="button" id="bouton4" class="vignette" value="Fourth">
        <input type="button" id="bouton5" class="vignette" value="Fifth">
        <input type="button" id="bouton6" class="vignette" value="Sixth">
        <input type="button" id="bouton7" class="vignette" value="Seventh">
        <input type="button" id="bouton8" class="vignette" value="Eigth">
        <input type="button" id="bouton9" class="vignette" value="Ninth">
        <div id="popup1" class="invisible">1</div>
        <div id="popup2" class="invisible">2</div>
        <div id="popup3" class="invisible">3</div>
        <div id="popup4" class="invisible">4</div>
        <div id="popup5" class="invisible">5</div>
        <div id="popup6" class="invisible">6</div>
        <div id="popup7" class="invisible">7</div>
        <div id="popup8" class="invisible">8</div>
        <div id="popup9" class="invisible">9</div>
        
        
小次郎又三郎
もちろん、あなたはこのaddClass()、toggleClass()のようなことをするでしょう
小次郎又三郎
あなたの質問から理解できる限り、IDがボタンのIDと同じ番号であるモーダルを表示したいですか? これと同じロジックを使用して、代わりにモーダルを操作できます
        // This regex just gets the number part from the ID
        const re = /bouton(\d+)/
        $('button.vignette').click(e => {
            const res = re.exec(e.target.id)
            if(res) {
                // "popup" + res[1] gives the popup id
                $('#content').html("popup" + res[1])
            }
        })
        
        <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
        <button class = "vignette" id = "bouton1">B1</button>
        <button class = "vignette" id = "bouton2">B1</button>
        <button class = "vignette" id = "bouton3">B1</button>
        <button class = "vignette" id = "bouton4">B1</button>
        <div id = "content"></div>
        
小次郎又三郎
はい、それはまさに私がやるべきことです、ありがとう、私はコードを含めませんでした。それは、同時にcssで見栄えを良くしようとしているので、現時点では本当に厄介だからです。ボタンはボタンではなく、画像を保持する<article>です。私のページにあなたのコードを統合するのに問題があります、そしてそれはそれが原因だと思います、とにかくそれを回避することはありますか?
小次郎又三郎
article.vignetteその代わりに、またはimg.vignette(ビネットクラスを保持する方)にする必要があると思いbutton.vignetteます。
小次郎又三郎
クラス付きのボタンが10個あるとするとvignette、コードは次のようになります。
        $.each( "button.vignette", function( i, obj) {
          $(obj).attr( "id", i ).on('click',function(){
            $('#popup'+i).toggle();
          });
        });
        
toggle()必要に応じて、関数をコードに置き換えることができます。
小次郎又三郎