2015-12-14 2 views
2

У меня возникают проблемы с розжига же событие на всех DIVs, которые имеют класс «карты», как показано на скриншоте ниже:Как установить кнопку события на все DIV с тем же классом

<div class="row"> 
    <div class="col-md-1"> 
    <div class="margin"></div> 
    <div class="card"> 
     <div class="front">CardClick</div> 
     <div class="back">1</div> 
    </div> 
    </div> 
    <div class="col-md-1"> 
    <div class="margin"></div> 
    <div class="card"> 
     <div class="front">CardClick</div> 
     <div class="back">2</div> 
    </div> 
    </div> 
    <div class="col-md-1"> 
    <div class="margin"></div> 
    <div class="card"> 
     <div class="front">CardClick</div> 
     <div class="back">4</div> 
    </div> 
    </div> 
    <div class="col-md-1"> 
    <div class="margin"></div> 
    <div class="card"> 
     <div class="front">CardClick</div> 
     <div class="back">5</div> 
    </div> 
    </div> 
</div> 
<div class="row"> 
    <div class="col-md-1"> 
    <div class="margin"></div> 
    <div class="card"> 
     <div class="front">CardClick</div> 
     <div class="back">4</div> 
    </div> 
    </div> 
    <div class="col-md-1"> 
    <div class="margin"></div> 
    <div class="card"> 
     <div class="front">CardClick</div> 
     <div class="back">5</div> 
    </div> 
    </div> 
    <div class="col-md-1"> 
    <div class="margin"></div> 
    <div class="card"> 
     <div class="front">CardClick</div> 
     <div class="back">6</div> 
    </div> 
    </div> 
    <div class="col-md-1"> 
    <div class="margin"></div> 
    <div class="card"> 
     <div class="front">CardClick</div> 
     <div class="back">4</div> 
    </div> 
    </div> 
</div> 

Я установил свой обработчик, как :

$(".card").click(function() { 
    alert("clicked..."); 
}); 

Проблема заключается в том, что окно предупреждения появляется только для тех DIV, помеченных как черный на скриншоте ниже. Для всех остальных полей строка alert("clicked...") не выполняет событие.

Даже поле, помеченное как 5 в верхней строке, имеет поле предупреждения, только если оно щелкнуто в правом верхнем углу. При нажатии на любое другое место в этом поле не запускается предупреждение. (Коробки в нижней строке не имеют этой проблемы, оповещение для них кажется прекрасным, если щелкнуть внутри них где угодно).

Это как-то связано с Event Bubbling или Event Catching? Как я могу исправить это так, чтобы предупреждение вызывалось для всех DIV с классом «карта»?

enter image description here

Update: Связанные CSS выглядеть следующим образом:

.card { 
    width: 100px; 
    height: 100px; 
    position: absolute; 
    -webkit-transition: -webkit-transform 1s; 
    -moz-transition: -moz-transform 1s; 
    -o-transition: -o-transform 1s; 
    transition: transform 1s; 
    -webkit-transform-style: preserve-3d; 
    -moz-transform-style: preserve-3d; 
    -o-transform-style: preserve-3d; 
    transform-style: preserve-3d; 
    -webkit-transform-origin: 50% 50%; 
} 
.card div { 
    display: block; 
    height: 100%; 
    width: 100%; 
    line-height: 100px; 
    color: black; 
    text-align: center; 
    font-weight: bold; 
    font-size: 16px; 
    position: absolute; 
    -webkit-backface-visibility: hidden; 
    -moz-backface-visibility: hidden; 
    -o-backface-visibility: hidden; 
    backface-visibility: hidden; 
} 
.card .front { 
    background: white; 
    border-color: black; 
    border-width: 3px; 
    border-style: solid; 
    color:black; 
} 
.card .back { 
    background: black; 
    color:white; 
    -webkit-transform: rotateY(180deg); 
    -moz-transform: rotateY(180deg); 
    -o-transform: rotateY(180deg); 
    transform: rotateY(180deg); 
} 

.margin { 
    margin-top: 200%; 
} 

Update - Добавлен HTML код на вопрос. Раньше у меня был снимок экрана. «col-md-1» и т. д. - то, как twitter bootstrap помогает выложить сетку.

+4

Вы можете сделать jsfiddle с кодом HTML и CSS? – Andy

+2

Эта проблема может быть не проблемой js, а проблемой css/html. – rottenoats

+0

Да, нет никаких подсказок о том, как вы чертили черно-белые карты по-разному. Я подозреваю, что CardClick - это «фиктивный» div, а черная карта - «карта». Так будет проблема HTML/CSS, где «карта» равна 0 ширине и высоте (без кликаемой цели). – Akurn

ответ

0

розжиг же событие на всех DIVs, которые имеют класс "карты"

Но вы связывающие его на div с с классом click

изменить его

$(".card").click(function() { 
    alert("clicked..."); 
}); 
+0

Это была опечатка в stackoverflow. Исправлено это сейчас. Спасибо, что заметили. Код привязывает его к .card – baltoro

3

не забудьте поставить свой код jquery/javascript внутри готовой к документу функции $(function() { /* ..code.. */ });. так что вы знаете, что ваши дивы загружаются в DOM в точке, где вы хотите, чтобы применить клик-событие:

$(function() { 

    $("div.card").on("click", function(e){ 
     //your code here.. 
     alert("div with class 'card' clicked!"); 

     e.preventDefault(); //to prevent any other unwanted behavior clicking the div might cause 
    }); 

}); 

Примечание: селектор $("div.card") относится только к дивы с «картой» класса ,

+0

У меня есть код JS внутри документа 'load', и я считаю, что события onload запускаются после' ready', поэтому это не должно быть проблемой. – baltoro

+0

@baltusaj ok, и вы исправили свой селектор в своем вопросе, как я вижу. и у вас все еще есть такая же проблема? вы действительно должны попытаться воспроизвести свою проблему в [jsfiddle] (http://jsfiddle.net/) - я знаю, что это немного работа, но это действительно помогло бы нам поддержать вас. –

0

Вы можете установить обработчик следующим образом. поэтому вы узнаете, какой элемент карты вы нажимаете. надеюсь, это поможет вам.

$(function(){ 
    $(".card").on('click', function() { 
     alert($(this).text() + "clicked..."); 
    }); 
    }); 
0

Не вижу никаких проблем, если мы изменим $(".click").click(function() { с $(".card").click(function() {, как вы хотите, чтобы добавить обработчик событий click для всех дивы, имеющих класс card.Ниже работает фрагмент кода:

$(document).ready(function(){ 
 
    $(".card").click(function() { 
 
    alert("clicked..."); 
 
    }); 
 
});
.margin { 
 
    margin-top: 200%; 
 
} 
 
.card{ 
 
    max-width:40px; 
 
    min-height:20px; 
 
    background:cyan; 
 
    border: 1px solid black; 
 
    }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script> 
 
click on Divs below: 
 

 
<div class="card margin">1</div> 
 
<div class="card margin">2</div> 
 
<div class="card margin">3</div> 
 
<div class="card margin">4</div>

2

Друг, вы можете сослаться на это, может быть, это поможет вам. Я показал три способа привязки события.

http://jsfiddle.net/amitv1093/9kgq58fe/

 $(document).ready(function(){ 

/* option #1*/ 
    $(".card").click(function(){ 
     alert("you clicked " + $(this).attr("class")); 
    }); 

    /* option #2*/ 
    $(".card").on('click',function(){ 
     alert("you clicked " + $(this).attr("class")); 
    }); 
    /* option #3*/ 
     $(document).on('click','.card',function(){ 
     alert("you clicked " + $(this).attr("class")); 
    }); 
});