2015-08-30 2 views
-2

Так что я занят созданием мини-интернет-магазин, и я использую передний конец Google (MDL) шаблон

То, что я хотел сделать в моем интернет-магазине есть, когда пользователь нажимает на x-продукт. Я хочу переключить класс,

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

Моя единственная проблема - класс не переключается. Я пробовал использовать addClass, но это не так удобно, потому что я действительно хочу переключить класс (из выбранного продукта не выбрано)

Оформить заказ мой сниппет &, вы поймете, что увидите, что я правильно определяю клики , Но переключение классов не работает.

$(document).ready(function() { 
 
\t console.log("Document ready"); 
 
    for (var i = 1; i < $(".products").length; i++) { 
 
\t \t (function(index){ 
 
\t \t $(".products").click(
 
\t \t \t function(e){ 
 
\t \t \t console.log("click successfull!"); 
 
\t   console.log(this); 
 
\t   $(this).css("border", "1px solid #1976D2"); 
 
\t   
 
\t   $(this).toggleClass("mdl-shadow--16dp"); 
 
\t  \t }); 
 
\t \t })(i); 
 
\t } 
 

 
\t $("#Card").keyup(function(event){ 
 
\t   if(event.keyCode == 84){ 
 
\t   console.log("Class toggled!"); 
 
\t   $(".products").toggleClass("mdl-shadow--2dp mdl-shadow--16dp"); 
 
\t   } 
 
\t  }); 
 
    
 
    });
.mdl-card__actions{ 
 
    display: flex; 
 
    box-sizing:border-box; 
 
    align-items: center; 
 
} 
 
.page-content .mdl-card { 
 
\t display: inline-block; 
 
\t margin: 5px 5px 5px 5px; \t 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<link rel="stylesheet" href="https://storage.googleapis.com/code.getmdl.io/1.0.2/material.indigo-pink.min.css"> 
 
    <script src="https://storage.googleapis.com/code.getmdl.io/1.0.2/material.min.js"></script> 
 
    <link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons"> 
 
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<body> 
 
    \t <div class="page-content"> 
 
\t \t \t \t \t \t \t <!-- Your content goes here --> 
 
\t \t \t \t \t \t \t <div class="mdl-card mdl-shadow--2dp products"> 
 
\t \t \t \t \t \t \t \t <div class="mdl-card__title"> 
 
\t \t \t \t \t \t \t \t \t <h2 class="mdl-card__title-text">Dell XP13 </h2> 
 
\t \t \t \t \t \t \t \t </div> 
 
\t \t \t \t \t \t \t \t <img src="https://goo.gl/gDDH0i" alt="dell xp13"> 
 
\t \t \t \t \t \t \t \t <div class="mdl-card__supporting-text"><b>Basisprijs: 1.649,00$<b></div> 
 
\t \t \t \t \t \t \t \t <div class="mdl-card__actions mdl-card--border"> 
 
\t \t \t \t \t \t \t \t \t <a class="mdl-button mdl-button--colored mdl-js-button mdl-js-ripple-effect"> 
 
\t \t \t \t \t \t \t \t \t \t Add to cart 
 
\t \t \t \t \t \t \t \t \t </a> 
 
\t \t \t \t \t \t \t \t \t <div class="mdl-layout-spacer"></div> 
 
\t \t \t \t \t \t \t \t \t <i class="material-icons">add_shopping_cart</i> 
 
\t \t \t \t \t \t \t \t </div> 
 
\t \t \t \t \t \t \t </div> \t \t 
 
\t \t \t \t \t \t \t <div class="mdl-card mdl-shadow--2dp products"> 
 
\t \t \t \t \t \t \t <div class="mdl-card__title"> 
 
\t \t \t \t \t \t \t \t <h2 class="mdl-card__title-text">Chromebook pixel2</h2> 
 
\t \t \t \t \t \t \t </div> 
 
\t \t \t \t \t \t \t <img src="https://goo.gl/pNie9C.png" alt="chrombook"> 
 
\t \t \t \t \t \t \t <div class="mdl-card__supporting-text"><b>Basisprijs: 999,99$<b></div> 
 
\t \t \t \t \t \t \t <div class="mdl-card__actions mdl-card--border"> 
 
\t \t \t \t \t \t \t \t <a class="mdl-button mdl-button--colored mdl-js-button mdl-js-ripple-effect"> 
 
\t \t \t \t \t \t \t \t \t Add to cart 
 
\t \t \t \t \t \t \t \t </a> 
 
\t \t \t \t \t \t \t \t <div class="mdl-layout-spacer"></div> 
 
\t \t \t \t \t \t \t \t \t <i class="material-icons">add_shopping_cart</i> 
 
\t \t \t \t \t \t \t </div> 
 
\t \t \t \t \t \t </div> 
 
\t \t \t \t \t \t <div class="mdl-card mdl-shadow--2dp products"> 
 
\t \t \t \t \t \t \t <div class="mdl-card__title"> 
 
\t \t \t \t \t \t \t \t <h2 class="mdl-card__title-text">Macbook 13'</h2> 
 
\t \t \t \t \t \t \t </div> 
 
\t \t \t \t \t \t \t <img src="https://goo.gl/qzq0Cr" alt="Macbook"> 
 
\t \t \t \t \t \t \t <div class="mdl-card__supporting-text"><b>Basisprijs: 1.129,00$<b></div> 
 
\t \t \t \t \t \t \t <div class="mdl-card__actioder"> 
 
\t \t \t \t \t \t \t \t <a class="mdl-button mdl-button--colored mdl-js-button mdl-js-ripple-effect"> 
 
\t \t \t \t \t \t \t \t \t Add to cart 
 
\t \t \t \t \t \t \t \t </a> 
 
\t \t \t \t \t \t \t \t <div class="mdl-layout-spacer"></div> 
 
\t \t \t \t \t \t \t \t \t <i class="material-icons">add_shopping_cart</i> 
 
\t \t \t \t \t \t \t </div> 
 
\t \t \t \t \t \t </div> 
 
\t \t \t \t \t </div> 
 
    </body>

Я покажу вам эффект я переключаясь в отдельной ссылке, в этом link я переключая эффект для всех «дивы» Но я не буду его за клик.

ответ

1

Я не уверен, что вам понадобится петля здесь, но, по моему мнению, это может быть причиной того, что она не работает. Я установил фрагмент без цикла, так что теперь toggleClass() хорошо работает, я также добавил класс .border в css, с ним проще справиться. Кроме того, я объединил и toggleClass() в одной строке, но это просто оптическая вещь.

Заканчивать сниппет

$(document).ready(function() { 
 
    console.log("Document ready"); 
 
    $(".products").click(function() { 
 
    console.log("click successfull!"); 
 
    console.log(this); 
 
    $(this).toggleClass("border").toggleClass("mdl-shadow--16dp"); 
 

 
    }); 
 

 
    $("#Card").keyup(function(event) { 
 
    if (event.keyCode == 84) { 
 
     console.log("class toggled!"); 
 
     $(".products").toggleClass("mdl-shadow--2dp mdl-shadow--16dp"); 
 
    } 
 
    }); 
 
});
.mdl-card__actions { 
 
    display: flex; 
 
    box-sizing: border-box; 
 
    align-items: center; 
 
} 
 
.page-content .mdl-card { 
 
    display: inline-block; 
 
    margin: 5px 5px 5px 5px; 
 
} 
 
.border { 
 
    border: 1px solid #1976D2; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<link rel="stylesheet" href="https://storage.googleapis.com/code.getmdl.io/1.0.2/material.indigo-pink.min.css"> 
 
<script src="https://storage.googleapis.com/code.getmdl.io/1.0.2/material.min.js"></script> 
 
<link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons"> 
 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 

 
<body> 
 
    <div class="page-content"> 
 
    <!-- Your content goes here --> 
 
    <div class="mdl-card mdl-shadow--2dp products"> 
 
     <div class="mdl-card__title"> 
 
     <h2 class="mdl-card__title-text">Dell XP13 </h2> 
 
     </div> 
 
     <img src="https://goo.gl/gDDH0i" alt="dell xp13"> 
 
     <div class="mdl-card__supporting-text"><b>Basisprijs: 1.649,00$<b></div> 
 
\t \t \t \t \t \t \t \t <div class="mdl-card__actions mdl-card--border"> 
 
\t \t \t \t \t \t \t \t \t <a class="mdl-button mdl-button--colored mdl-js-button mdl-js-ripple-effect"> 
 
\t \t \t \t \t \t \t \t \t \t Add to cart 
 
\t \t \t \t \t \t \t \t \t </a> 
 
\t \t \t \t \t \t \t \t \t <div class="mdl-layout-spacer"></div> 
 
\t \t \t \t \t \t \t \t \t <i class="material-icons">add_shopping_cart</i> 
 
\t \t \t \t \t \t \t \t </div> 
 
\t \t \t \t \t \t \t </div> \t \t 
 
\t \t \t \t \t \t \t <div class="mdl-card mdl-shadow--2dp products"> 
 
\t \t \t \t \t \t \t <div class="mdl-card__title"> 
 
\t \t \t \t \t \t \t \t <h2 class="mdl-card__title-text">Chromebook pixel2</h2> 
 
\t \t \t \t \t \t \t </div> 
 
\t \t \t \t \t \t \t <img src="https://goo.gl/pNie9C.png" alt="chrombook"> 
 
\t \t \t \t \t \t \t <div class="mdl-card__supporting-text"><b>Basisprijs: 999,99$<b></div> 
 
\t \t \t \t \t \t \t <div class="mdl-card__actions mdl-card--border"> 
 
\t \t \t \t \t \t \t \t <a class="mdl-button mdl-button--colored mdl-js-button mdl-js-ripple-effect"> 
 
\t \t \t \t \t \t \t \t \t Add to cart 
 
\t \t \t \t \t \t \t \t </a> 
 
\t \t \t \t \t \t \t \t <div class="mdl-layout-spacer"></div> 
 
\t \t \t \t \t \t \t \t \t <i class="material-icons">add_shopping_cart</i> 
 
\t \t \t \t \t \t \t </div> 
 
\t \t \t \t \t \t </div> 
 
\t \t \t \t \t \t <div class="mdl-card mdl-shadow--2dp products"> 
 
\t \t \t \t \t \t \t <div class="mdl-card__title"> 
 
\t \t \t \t \t \t \t \t <h2 class="mdl-card__title-text">Macbook 13'</h2> 
 
\t \t \t \t \t \t \t </div> 
 
\t \t \t \t \t \t \t <img src="https://goo.gl/qzq0Cr" alt="Macbook"> 
 
\t \t \t \t \t \t \t <div class="mdl-card__supporting-text"><b>Basisprijs: 1.129,00$<b></div> 
 
\t \t \t \t \t \t \t <div class="mdl-card__actioder"> 
 
\t \t \t \t \t \t \t \t <a class="mdl-button mdl-button--colored mdl-js-button mdl-js-ripple-effect"> 
 
\t \t \t \t \t \t \t \t \t Add to cart 
 
\t \t \t \t \t \t \t \t </a> 
 
\t \t \t \t \t \t \t \t <div class="mdl-layout-spacer"></div> 
 
\t \t \t \t \t \t \t \t \t <i class="material-icons">add_shopping_cart</i> 
 
\t \t \t \t \t \t \t </div> 
 
\t \t \t \t \t \t </div> 
 
\t \t \t \t \t </div> 
 
    </body>

+0

Я зациклился на них, потому что так я достиг чего-то подобного в другом проекте, где я бы взял innerHTML щелкнутого элемента. Но я определенно недооценил, как я должен был это достичь, спасибо за отредактированный фрагмент, я понимаю, что я мог бы сделать это намного проще. Его просто путают меня, что CSS-границы работали, но toggleClass() этого не делал. – Abdel

+1

Ну, я думаю, вы неправильно поняли, как работает '.click (...)' прослушиватель. Как я уже говорил, нет необходимости прокручивать каждую кнопку, потому что, как уже сказано, это событие ** слушатель **. Так что, как всегда, вы ожидаете, когда ваше взаимодействие начнет работать с обработчиком, особенно если у вас больше кнопок с одинаковым классом, слушатель будет запущен, как только один из них будет нажат, независимо от того, какой из них какой класс, идентификатор или другой атрибут связан с слушателем) –

+1

Да, вы абсолютно правы в том, что я неправильно понял, как работает слушатель. Читая этот вопрос через 5 недель после того, как я спросил его, я чувствую себя очень не обращать внимания, я все понимаю сейчас, спасибо, что потратил время, объясняя и демонстрируя, как это работает. Я использую его сейчас. – Abdel

0

проблема только в цикле. Если вы используете селектор классов и привязываете событие, то почему вы его зацикливаете. Таким образом, вместо того, чтобы использовать

for (var i = 1; i < $(".products").length; i++) { 
    (function(index){ 
    $(".products").click(
     function(e){ 
     console.log("click successfull!"); 
     console.log(this); 
     $(this).css("border", "1px solid #1976D2"); 

     $(this).toggleClass("mdl-shadow--16dp"); 
     }); 
    })(i); 
} 

использовать следующий код

$(".products").click(
    function(e){ 
    console.log("click successfull!"); 
    console.log(this); 
    $(this).css("border", "1px solid #1976D2"); 
    $(this).toggleClass("mdl-shadow--16dp"); 
}); 

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

+0

Я зациклился на них, потому что так я достиг чего-то подобного в другом проекте, где я бы взял innerHTML щелкнутого элемента. Но я определенно задумался над тем, как это должно было быть сделано, спасибо человеку! – Abdel

Смежные вопросы