2017-02-02 6 views
1

特定の四角形をクリックして、その上に表示するためのチェックマークを表示できるようにしようとしています。私はそれがトグル効果を持ってほしいと思っていますが、私は表示するためのチェックマークを少なくとも得ようとしました。トグルを使用して別のdivの上に表示する画像を取得する

私は間違っていますか?

$('.package-img').click(function() { 
 
     //target.innerHTML = '<img src="images/checkmark-circle.png" class="checkmark-img total-center">'; 
 
     $('.package-img').prepend('<img src="https://d30y9cdsu7xlg0.cloudfront.net/png/835-200.png" class="checkmark-img">') 
 
    });
.package-img { 
 
    width: 60%; 
 
    height: auto; 
 
    opacity: 1; 
 
    margin-left: 20%; 
 
    cursor: pointer; 
 
    transition:1s; -webkit-transition:1s; 
 
    position: relative; 
 
} 
 
#calendar-wrap, #tp-wrap { 
 
    width: 100%; 
 
    position: relative; 
 
} 
 
.checkmark-img { 
 
    width: 50%; 
 
    height: 50%; 
 
    z-index: 1; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="calendar-wrap"> 
 
    <h2 class="product-titles">Package 1</h2> 
 
    <img src="http://jwilson.coe.uga.edu/emt725/SqToAcuteTri/Square.gif" alt="Package 1" class="package-img" id="calendar-img"> 
 
</div> 
 
<div id="calendar-wrap"> 
 
    <h2 class="product-titles">Package 2</h2> 
 
    <img src="http://jwilson.coe.uga.edu/emt725/SqToAcuteTri/Square.gif" alt="Package 2" class="package-img" id="tp-img"> 
 
</div>

+0

それを取得するために、兄弟セレクタを使用する必要があります。私はCSSのバージョンを含むように私の答えを更新しました。 Javascriptは必要ありません。 – Nico

答えて

2

ですべての画像に追加されますあなたが探しているものを理解されている$(this).before...を使用しています。基本的には、チェックマークの正方形をクリックすると、チェックマーク画像をチェックマークの正方形の画像に「切り替える」ことができます。この問題は、トグルがもう機能しない四角の上にチェックマークを付けることです。私はもう少しうまくいくはずの解決策を考え出しました。

は、基本的に我々はlabelが選択されているときには、チェックボックスのcheckedプロパティをtoggleます<input type="checkbox" />これにバインドされているルールを利用する場合。

jQueryでこのイベントにバインドし、チェックマークを表示しないようにすることができます。この例では、クリックイベントはイメージにバインドしませんが、チェックボックスのイベントはchangeです。以下の例のようなもの。

は今の質問は次のとおりです。

は、なぜ私たちは私たちのフォームのポストで結果をキャプチャすることができ、チェックボックスを使って、まあ、チェックボックス

を使用しました。また、checkedプロパティを持つすべてのチェックボックスを列挙することで、チェックされる内容を簡単に識別できます。

これをサーバーに送信するには、nameプロパティを各チェックボックスに追加し、valueプロパティも設定する必要があります。

$('.calendar-check').on('change', function() { 
 
    if ($(this).prop('checked')) 
 
    $(this).parents('.calendar-wrap:first').find('.checkmark-img').show(); 
 
    else 
 
    $(this).parents('.calendar-wrap:first').find('.checkmark-img').hide(); 
 

 
});
.package-img { 
 
    width: 60%; 
 
    height: auto; 
 
    opacity: 1; 
 
    margin-left: 20%; 
 
    cursor: pointer; 
 
    transition: 1s; 
 
    -webkit-transition: 1s; 
 
    position: relative; 
 
} 
 

 
#calendar-wrap, 
 
#tp-wrap { 
 
    width: 100%; 
 
    position: relative; 
 
} 
 

 
.checkmark-img { 
 
    display: none; 
 
    z-index: 1; 
 
    position: absolute; 
 
    top: 50%; 
 
    left: 50%; 
 
    margin-top: -100px; 
 
    margin-left: -100px; 
 
} 
 

 
.calendar-check { 
 
    display: none; 
 
} 
 

 
.package-check-toggle { 
 
    position: relative; 
 
    height: 100%; 
 
    width: 100%; 
 
    display: block; 
 
    cursor: pointer; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="calendar-wrap" class="calendar-wrap"> 
 
    <h2 class="product-titles">Package 1</h2> 
 
    <label for="package-check-1" class="package-check-toggle"> 
 
    <img src="http://jwilson.coe.uga.edu/emt725/SqToAcuteTri/Square.gif" alt="Package 1" class="package-img" id="calendar-img" /> 
 
    <img src="https://d30y9cdsu7xlg0.cloudfront.net/png/835-200.png" alt="Package 1" class="checkmark-img" /> 
 
    </label> 
 
    <input type="checkbox" class="calendar-check" id="package-check-1" /> 
 
</div> 
 
<div id="calendar-wrap" class="calendar-wrap"> 
 
    <h2 class="product-titles">Package 2</h2> 
 
    <label for="package-check-2" class="package-check-toggle"> 
 
    <img src="http://jwilson.coe.uga.edu/emt725/SqToAcuteTri/Square.gif" alt="Package 2" class="package-img" id="calendar-img" /> 
 
    <img src="https://d30y9cdsu7xlg0.cloudfront.net/png/835-200.png" alt="Package 2" class="checkmark-img" /> 
 
    </label> 
 
    <input type="checkbox" class="calendar-check" id="package-check-2" /> 
 
</div>

サンプルJSFiddle

EDIT私はCSS(3)唯一の解決策を表示するために最善考え出しcompletnessがたのために 。これは、jQueryの使用に全く依存しません。この場合も、チェックボックス(値に基づく)を考慮に入れ、トグルに基づいてチェックマークをトグルします。

マークアップは非常に簡単です。

<div class="calendar-checkmark"> 
    <input type="checkbox" id="checkbox-1" name="checkbox1" value="true" /> 
    <label for="checkbox-1"></label> 
</div> 

例:

.calendar-checkmark input[type=checkbox] { 
 
    display: none; 
 
} 
 

 
.calendar-checkmark label { 
 
    cursor:pointer; 
 
    display: block; 
 
    height: 384px; 
 
    width: 354px; 
 
    position:relative; 
 
    background: url('http://jwilson.coe.uga.edu/emt725/SqToAcuteTri/Square.gif') no-repeat center center transparent; 
 
} 
 

 
.calendar-checkmark label::after { 
 
    content:' '; 
 
    display: block; 
 
    height: 100%; 
 
    width: 100%; 
 
    position: absolute; 
 
    z-index:1; 
 
    display:none; 
 
    background: url('https://d30y9cdsu7xlg0.cloudfront.net/png/835-200.png') no-repeat center center transparent; 
 
} 
 

 
.calendar-checkmark input[type=checkbox]:checked + label::after { 
 
    display: block; 
 
     
 
}
<div class="calendar-checkmark"> 
 
    <input type="checkbox" id="checkbox-1" name="checkbox1" value="true" /> 
 
    <label for="checkbox-1"></label> 
 
</div>

ここにトリックはあなたが別の要素のベース隣接兄弟を選択することができるようAdjacent sibling selectorsを使用しています。したがって、チェックボックスをオンにしたときにCSSを見ると、:hoverなどと同様にPsudo-class:checkedが適用されます。次に隣接する+セレクタを使用してlabelを探します。

これで、label要素のCSS背景が四角形のボックスの画像に設定されています。次にpsudo-class ::afterが適用され、チェックボックスを含むpsudo-elementが作成されます。要素の後に追加されます。チェックボックスがcheckedの場合、psudoクラス:checkedが指定されます。これは、要素を表示することによってpsudo要素の状態を変更します。

Another Fiddle

+0

これをすべてうまく説明していただきありがとうございます。私はあなたの価値を捉えることができるのが好きなので、あなたの答えを変えました。簡単な質問:要素をクリックすると、値を取得してページに印刷するにはどうすればよいですか? IE:ボックス1をクリックし、次にボックス2をクリックします。ページの他の場所では、ボックス1とボックス2が表示されます。 – Paul

+0

チェックボックスの 'change'イベントにバインドして、ページを更新することができます。チェックボックスのリストを取得するには、チェックされたすべての値を含むjQuery配列を返す '$( '。calendar-check:checked')'のようなことをすることができます。 – Nico

3

使用before方法の代わりに、prepend、そうでない場合は、あなたの画像を別の画像の内側に追加されています。また、それ以外の場合は、あなたのチェックマークがクラ​​スpackage-img

$(this).before('<img src="https://d30y9cdsu7xlg0.cloudfront.net/png/835-200.png" class="checkmark-img">') 

var $img = $('<img src="https://d30y9cdsu7xlg0.cloudfront.net/png/835-200.png" class="checkmark-img"/>').hide(); 
 
$('.package-img').before($img); 
 

 
$('.package-img').click(function() { 
 
    $(this).prev().show(); 
 
}); 
 

 
$('.checkmark-img').click(function() { 
 
    $(this).hide(); 
 
});
.package-img { 
 
    width: 60%; 
 
    height: auto; 
 
    opacity: 1; 
 
    margin-left: 20%; 
 
    cursor: pointer; 
 
    transition:1s; -webkit-transition:1s; 
 
    position: relative; 
 
} 
 
#calendar-wrap, #tp-wrap { 
 
    width: 100%; 
 
    position: relative; 
 
} 
 
.checkmark-img { 
 
    width: 50%; 
 
    height: 100%; 
 
    z-index: 1; 
 
    position: absolute; 
 
    left: 25%; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="calendar-wrap"> 
 
    <h2 class="product-titles">Package 1</h2> 
 
    <img src="http://jwilson.coe.uga.edu/emt725/SqToAcuteTri/Square.gif" alt="Package 1" class="package-img" id="calendar-img"> 
 
</div> 
 
<div id="calendar-wrap"> 
 
    <h2 class="product-titles">Package 2</h2> 
 
    <img src="http://jwilson.coe.uga.edu/emt725/SqToAcuteTri/Square.gif" alt="Package 2" class="package-img" id="tp-img"> 
 
</div>

+0

これは、ページの上部にチェックの束を追加しますか? – Paul

+0

@Paul私はこれがあなたのCSSに関係していると思います。箱に入れたい場合は、より正確に位置を使用する必要があります – sol

+0

これをトグルにするにはどうしますか? – Paul

0

私達はちょうど箱のイメージを削除し、CSSを経由して、それらを作成する場合、これはずっと簡単することができます。ダウンロードすることが少なくなり、ボックスの背景を透明にすることができます。これにより、すでに各ボックスの背後にあるチェックマークを表示したり非表示にすることができます。

$('.package-img').click(function() { 
 
    this.nextElementSibling.classList.toggle("hide"); 
 
});
parent { position:relative; } 
 

 
.package-img { 
 
    border:3px solid black; 
 
    width: 110px; 
 
    height:110px; 
 
    background-color:rgba(0,0,0,0); 
 
    margin-left: 20%; 
 
    cursor: pointer; 
 
    position:relative; 
 
    display:inline-block; 
 
} 
 

 
.checkmark-img { 
 
    transition:1s; 
 
    width: 15%; 
 
    z-index: -1; 
 
    position:relative; 
 
    margin-left:-15%; 
 
    
 
} 
 

 
img.hide { display:none; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 

 
<h2 class="product-titles">Package 1</h2> 
 
<div class="parent"> 
 
    <div class="package-img"></div> 
 
    <img src="https://d30y9cdsu7xlg0.cloudfront.net/png/835-200.png" class="checkmark-img hide"> 
 
</div> 
 

 
<h2 class="product-titles">Package 2</h2> 
 
<div class="parent"> 
 
    <div class="package-img"></div> 
 
    <img src="https://d30y9cdsu7xlg0.cloudfront.net/png/835-200.png" class="checkmark-img hide"> 
 
</div>

0

1.絶対にそれを明らかにするために、パッケージ画像

2.隠すこと

3.トグルの上にチェックマークを配置

そのそれの上に隠れているので、あなたは値を保持するために、チェックボックスを使用し

$('.checkmark-img').hide(); 
 
$('.package-img').click(function() { 
 
    $('.checkmark-img').toggle(); 
 
});
.package-img { 
 
     width: 60%; 
 
     height: auto; 
 
     opacity: 1; 
 
     margin-left: 20%; 
 
     cursor: pointer; 
 
     transition:1s; -webkit-transition:1s; 
 
     position: relative; 
 
    } 
 
    #calendar-wrap, #tp-wrap { 
 
     width: 100%; 
 
     position: relative; 
 
    } 
 
    .checkmark-img { 
 
     width: 60%; 
 
     height: auto; 
 
     opacity: 1; 
 
     margin-left: 25%; 
 
     margin-top:10%; 
 
     cursor: pointer; 
 
     transition:1s; -webkit-transition:1s; 
 
     position: absolute; 
 
     width: 50%; 
 
     height: 50%; 
 
     z-index: 1; 
 
     
 
    }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="calendar-wrap"> 
 
     <h2 class="product-titles">Package 1</h2> 
 
     <img src="https://d30y9cdsu7xlg0.cloudfront.net/png/835-200.png" class="checkmark-img">' 
 
     <img src="http://jwilson.coe.uga.edu/emt725/SqToAcuteTri/Square.gif" alt="Package 1" class="package-img" id="calendar-img"> 
 
</div> 
 
<div id="calendar-wrap"> 
 
     <h2 class="product-titles">Package 2</h2> 
 
     <img src="https://d30y9cdsu7xlg0.cloudfront.net/png/835-200.png" class="checkmark-img">' 
 
     <img src="http://jwilson.coe.uga.edu/emt725/SqToAcuteTri/Square.gif" alt="Package 2" class="package-img" id="tp-img"> 
 
     
 
</div>

関連する問題