Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 20.07.2018, 15:49
Аватар для madeas
Профессор
Отправить личное сообщение для madeas Посмотреть профиль Найти все сообщения от madeas
 
Регистрация: 13.04.2018
Сообщений: 232

Присвоение класса и передача свойств
Привет всем! Нужна помощь со скриптом.

Есть примерно 10 кнопок (могут добавляться), каждая из которых присваивает контейнеру с классом .bSm определенные свойства:

$('#1').click(function() {
  $('.bSm').toggleClass('one');
});
$('#2').click(function() {
  $('.bSm').toggleClass('two');
});
$('#3').click(function() {
  $('.bSm').toggleClass('three');
});
...


<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
<style>
.bSm {
  display: block;
  background: #fff;
  width: 150px;
  height: 150px;
  border-radius: 8px;
  margin: 0 auto;
}
.two {
  width: 450px;
  height: 675px;
  border-radius: 38px;
}
.three {
  width: 267px;
  height: 553px;
  border-radius: 18px;
}
</style>
<div class="bSm"></div>

<button id="1"></button>
<button id="2"></button>
<button id="3"></button>
<button id="4"></button>
...

<div class="bSres"></div>



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

Задача:
- сократить код (если это возможно)
- исправить нажатие кнопок
- вывести в контейнер с классом .bSres результат, т.е. все полученные параметры. Например, я составил контейнер <div class="bSm two three"></div>, то и в результате должны быть все параметры, а повторные (вроде width) заменялись на последние:

<div class="bSm two three"></div>
<style>
.bsm.two.three {
  display: block;
  background: #fff;
  width: 267px;
  height: 553px;
  border-radius: 18px;
  margin: 0 auto;
}
</style>

Последний раз редактировалось madeas, 20.07.2018 в 16:01.
Ответить с цитированием
  #2 (permalink)  
Старый 20.07.2018, 16:09
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,072

madeas,
<!DOCTYPE html>

<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">
  </style>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
  <script>
$(function() {
  var b = $('.btn'), cls = ["two","three"];
  b.click(function() {
  var i = b.index(this);
  $('.bSm').toggleClass(cls[i]);
});
});
  </script>
</head>

<body>
<style>
body{
    background-color: #EEE8AA;
}

.bSm {
  display: block;
  background: #fff;
  width: 150px;
  height: 150px;
  border-radius: 8px;
  margin: 0 auto;
}
.two {
  width: 450px;
  height: 675px;
  border-radius: 38px;
}
.three {
  width: 267px;
  height: 553px;
  border-radius: 18px;
}
</style>
<div class="bSm"></div>

<button  class="btn">2</button>
<button  class="btn">3</button>



<div class="bSres"></div>

</body>
</html>
Ответить с цитированием
  #3 (permalink)  
Старый 20.07.2018, 16:09
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Может в массиве/объекте описать классы, которые и будут выбираться, тогда один обработчик на кнопки будет. Вот только как .toggleClass('one'), .toggleClass('two'), ... ведь в этом случае другие классы могут накапливаться.

рони, уже "законопатил".
Ответить с цитированием
  #4 (permalink)  
Старый 20.07.2018, 16:11
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,072

madeas,
<!DOCTYPE html>

<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">
  </style>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
  <script>
$(function() {
  var b = $('.btn');
  b.click(function() {
  var cls = $(this).data("cls");
  $('.bSm').toggleClass(cls);
});
});
  </script>
</head>

<body>
<style>
body{
    background-color: #EEE8AA;
}

.bSm {
  display: block;
  background: #fff;
  width: 150px;
  height: 150px;
  border-radius: 8px;
  margin: 0 auto;
}
.two {
  width: 450px;
  height: 675px;
  border-radius: 38px;
}
.three {
  width: 267px;
  height: 553px;
  border-radius: 18px;
}
</style>
<div class="bSm"></div>

<button  class="btn" data-cls="two">2</button>
<button  class="btn" data-cls="three">3</button>



<div class="bSres"></div>

</body>
</html>
Ответить с цитированием
  #5 (permalink)  
Старый 20.07.2018, 16:21
Аватар для madeas
Профессор
Отправить личное сообщение для madeas Посмотреть профиль Найти все сообщения от madeas
 
Регистрация: 13.04.2018
Сообщений: 232

рони,
у меня, все равно почему-то при нажатии на одну из кнопок, вторая не работает, пока не нажму снова на предыдущую. И еще вопрос, как вывести полученный результат в другой див?
10 кнопок в разных блоках по 5 шт. Т.е. 5 дают одни свойства, например размер, а другие 5 создают фон. И эти 5 - 5 должны между собой переключаться. А сейчас, если я правильно понял, они как бы складываются.

Вот: http://jsfiddle.net/k4cm2wnd/1/

Последний раз редактировалось madeas, 20.07.2018 в 16:36.
Ответить с цитированием
  #6 (permalink)  
Старый 20.07.2018, 17:38
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,072

Сообщение от madeas
у меня, все равно почему-то при нажатии на одну из кнопок, вторая не работает, пока не нажму снова на предыдущую.
Сообщение от laimas
Вот только как .toggleClass('one'), .toggleClass('two'), ... ведь в этом случае другие классы могут накапливаться.
Ответить с цитированием
  #7 (permalink)  
Старый 20.07.2018, 17:43
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,072

madeas,
Сообщение от madeas
А сейчас, если я правильно понял, они как бы складываются.
если 5 классов одинаково приоритетных меняют ширину и все они присвоены элементу сработает первый добавленный
смотрите пост №9

Последний раз редактировалось рони, 21.07.2018 в 00:18.
Ответить с цитированием
  #8 (permalink)  
Старый 20.07.2018, 18:58
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

может, лучше работать со стилями?
<!DOCTYPE html>

<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">
  </style>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
  <script>
$(function() {
  var b = $('.btn'), cls = {}, str = '';
  b.click(function() {
     cls = $(this).data("cls");
  $('.bSm').css(cls);
});
});
  </script>
</head>

<body>
<style>
body{
    background-color: #EEE8AA;
}

.bSm {
  display: block;
  background: #fff;
  width: 150px;
  height: 150px;
  border-radius: 8px;
  margin: 0 auto;
}

</style>

<button  class="btn" data-cls='{"width": "450px", "height": "675px", "border-radius": "38px"}'>1</button>
<button  class="btn" data-cls='{"width":"267px","height":"553px","border-radius":"18px"}'>2</button>
<button  class="btn" data-cls='{"background-color":"green"}'>5</button>
<button  class="btn" data-cls='{"background-color":"red"}'>6</button>
<div class="bSm"></div>
<div class="bSres"></div>

</body>
</html>
Ответить с цитированием
  #9 (permalink)  
Старый 20.07.2018, 19:47
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

Сообщение от рони
если 5 классов одинаково приоритетных меняют ширину и все они присвоены элементу сработает первый добавленный
самый нижний в теге style
Ответить с цитированием
  #10 (permalink)  
Старый 20.07.2018, 21:24
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

рони,
это не
Сообщение от рони
одинаково приоритетных
!important более приоритетный

<head>
    <title></title>
    <style>
        .gray
        {
            background-color: gray !important;
        }
    </style>
</head>
<body>
<div id="id1" style="background-color: red!important" class="gray">red</div>
</body>
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
JQERY передача свойств из массива в .on() victornalchik Элементы интерфейса 3 18.02.2018 16:12
Присвоение класса определенного класса тегу Sowenak Javascript под браузер 6 01.09.2016 09:42
Присвоение класса при скроле pistachio jQuery 7 05.07.2015 18:50
Присвоение класса родителю при наведении на дочерний alexmoreman jQuery 7 19.01.2015 17:26
Использование классов в JavaScript devote Ваши сайты и скрипты 70 01.02.2013 17:17