2016-08-25 3 views
1

ディスプレイを使用して、複数のdivカードを並べて表示します:インラインブロックです。カードをクリックすると、ボタン以下 div。divの下にボタンを追加する方法onclick

jqueryのafter()関数を使用していますが、divのにボタンを追加しています。

どうすればいいですか?

PS:私は追加機能を使用しようとしましたが、divを再度クリックするとボタンを削除する別の機能があるため、ボタンをクリックするとdivのようになりますdivをクリックしてボタンが削除されているため、機能しません。

ありがとうございました!

が回答をいただき、誠にありがとうござい

編集... ...

申し訳ありませんが、コードを示していないため、ここにある:

<div class = "classOfDiv"> 
     here goes some product characteristics 
    </div> 


$('.classOfDiv').click(
    function() { 
     //gets the border because I need it to see if I'm clicking for the first time or second time. 
     var border = $(this).css("border"); 

     //checks the border 
     if (border == "0px none rgb(51, 51, 51)") { 
      //change the border style to say that the div has been clicked 
      $(this).css("border", "3px solid blue"); 
      //add the button 
      $(this).after("<button name = 'btnDetalhes' class = 'btn btn-primary'>Detalhes</button>"); 
     } else { 
      //remove the border (now the div is diselected) 
      $(this).css("border", "0px none rgb(51, 51, 51)"); 
      //remove the button 
      $(this).next("[name='btnDetalhes']").remove(); 
     } 
    } 
); 
+0

どこにあなたのコードはありますか? –

+1

コードを投稿できますか? htmlに挿入するのではなく、ボタンを隠す/表示することについて考えるべきです。 – Shnibble

+0

別の要素を配置しても、その要素が他の要素の下に表示されるわけではありません。これはCSSのためのものです... – yezzz

答えて

1

が、ここで私がショー/隠しで示唆されたものを実行する方法のために本当にラフな概念であり、 。

ボタンのdivを「隠す」ように指定する必要があります。それは、再びカードをクリックする必要がある場合は、単に会話を1としてtoggle

.card { 
 
    display: inline-block; 
 
    position: relative; 
 
    width: 100px; 
 
    height: 100px; 
 
    border: 1px solid black; 
 
    margin: 5px; 
 
    text-align: center; 
 
    cursor: pointer; 
 
    } 
 

 
.card-button { 
 
    display: none; 
 
    position: absolute; 
 
    bottom: -22px; 
 
    left: -1px; 
 
    width: 100%; 
 
    height: 20px; 
 
    border: 1px solid red; 
 
    }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<ul> 
 
    <li class="card" onclick="$('.card-button').show()"> 
 
    <p>Card Content</p> 
 
    <div class="card-button" onclick="alert('button clicked!')"> 
 
     <span>BUTTON</span> 
 
    </div> 
 
    </li> 
 
</ul>

show()を変更、代替ソリューションは、上のクリックを保つために、あなたのイベントハンドラでevent.stopPropogation()を使用することですボタンが他の親のクリックイベントを引き起こすのを防ぎます。

+0

答えをありがとう。それはアイデアです、唯一の問題は、最初にボタンをクリックすると、divの境界線が変わり、ボタンが表示されることです。今までは。しかし、divをもう一度押すと、ボーダーが通常の境界線にペイントされ、ボタンが削除されます。 ボタンをクリックすると、divをクリックしたように振る舞い、ボタンが消えます。それは主な問題です...私はボタンをクリックすると、divの動作を無視する方法はありますか? –

+1

完全なソリューションを提供するためには、皆さんが本当に完全なコードを投稿する必要があります。私はあなたが持っている問題を理解していると思うし、 'event.stopPropogation()'がクリックイベントハンドラに追加されて解決できる。しかし、あなたのコードを見ることなく、それがどこに収まるべきか正確に言うのは難しいです。 – Shnibble

+0

ありがとう、おい。 event.stopPropagation()は私の問題を解決しました! 回答として投稿しますか?私は答えとしてそれを確認することができるように? 私はコードについて申し訳ありませんが、説明のコードは十分だと思っていましたが、問題があり解決しました。 event.stopPropagation()を使用すると、ボタンをクリックした時点でdivがクリックされるのを防ぐので、魅力的に機能します。 ありがとう! –

0

私が書きました前のフォーラムのためのスポイラーBBCodes;コンセプトは本質的に同じであるので、それらを反転し、あなたが得る:あなたはまだ、実際の答えを持っていないので

<span> 
<div onclick="var s=this.parentNode.querySelector('button');s.style.display=s.style.display==''?'none':''"> 
<!-- put stuff here --> 
</div> 
<button type="button" style="display:none"><!-- put other stuff here --></button> 
</span> 
1

$(document).ready(function() { 
 
    
 
    
 
    $(".card").click(function() { 
 
    \t $(this).append('<a class="button" href="#">Button</a>'); 
 
\t }); 
 
    
 
    \t 
 
});
.card{ 
 
    display:inline-block; 
 
    position:relative; 
 
    width:200px; 
 
    height:100px; 
 
    margin-bottom:40px; 
 
    background-color:yellow; 
 
} 
 

 
.button{ 
 
    position: absolute; 
 
    bottom: -30px; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.0/jquery.min.js"></script> 
 

 
<div class="card">a</div> 
 
<div class="card">b</div> 
 
<div class="card">c</div> 
 
<div class="card">d</div> 
 
<div class="card">e</div> 
 
<div class="card">f</div> 
 
<div class="card">g</div>

関連する問題