Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 18.01.2021, 12:13
Профессор
Отправить личное сообщение для Сергей Ракипов Посмотреть профиль Найти все сообщения от Сергей Ракипов
 
Регистрация: 01.06.2010
Сообщений: 651

Button со скриптом
Есть вот такой код.

<!doctype html>
<html lang="ru">
<head>
	<meta charset="utf-8">
	<title>index</title>

	<meta name="viewport" content="width=device-width,initial-scale=1">
	<meta name="description" content="index">
	<meta name="Keywords" content="index"> 
    <style>
        .blok{
            width: 400px;
            height: 100px;
            margin: 10px auto;
            display: flex;
            justify-content: space-around;
        }
        .kvadrat{
            width: 100px;
            height: 100px;
            border: 3px solid #000;
        }
        #aktiv{
            border: 3px solid #0504aa;
        }
    </style>
</head>

<body>
    <div class="blok">
        <button class="kvadrat k1" id="aktiv"></button>
        <button class="kvadrat k2"></button>
        <button class="kvadrat k3"></button>
    </div>
<script>
    let k1 = document.querySelector(".k1");
    let k2 = document.querySelector(".k2");
    let k3 = document.querySelector(".k3");

    let aktiv_kvadrat1 = () => {
        document.querySelector(".k1").id = "aktiv";
        k2.removeAttribute("id");
        k3.removeAttribute("id");
    }
    k1.addEventListener("click", aktiv_kvadrat1);

    let aktiv_kvadrat2 = () => {
        document.querySelector(".k2").id = "aktiv";
        k1.removeAttribute("id");
        k3.removeAttribute("id");
    }
    k2.addEventListener("click", aktiv_kvadrat2);

    let aktiv_kvadrat3 = () => {
        document.querySelector(".k3").id = "aktiv";
        k2.removeAttribute("id");
        k1.removeAttribute("id");
    }
    k3.addEventListener("click", aktiv_kvadrat3);
</script>
</body>
</html>


И он отрабатывает как нужно, НО когда кликаю, почему border каким то не понятным светом накладывается.
И это именно с button если сделать с div то все будет хорошо работать.
Ответить с цитированием
  #2 (permalink)  
Старый 18.01.2021, 12:29
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

Сообщение от Сергей Ракипов
почему border каким то не понятным светом накладывается.
.kvadrat:focus{
           outline: none;
       }
Ответить с цитированием
  #3 (permalink)  
Старый 18.01.2021, 12:30
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

Сообщение от Сергей Ракипов
Есть вот такой код.
попробуйте не использовать id
Ответить с цитированием
  #4 (permalink)  
Старый 18.01.2021, 12:45
Профессор
Отправить личное сообщение для Сергей Ракипов Посмотреть профиль Найти все сообщения от Сергей Ракипов
 
Регистрация: 01.06.2010
Сообщений: 651

рони,
А почему не использовать?
Ответить с цитированием
  #5 (permalink)  
Старый 18.01.2021, 12:50
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

Сообщение от Сергей Ракипов
А почему не использовать?
путь ваш не близкий ...
<!doctype html>
<html lang="ru">
<head>
    <meta charset="utf-8">
    <title>index</title>

    <meta name="viewport" content="width=device-width,initial-scale=1">
    <meta name="description" content="index">
    <meta name="Keywords" content="index">
    <style>
        .blok{
            width: 400px;
            height: 100px;
            margin: 10px auto;
            display: flex;
            justify-content: space-around;
        }
        .kvadrat{
            width: 100px;
            height: 100px;
            border: 3px solid #000;
        }
        .kvadrat.aktiv{
            border: 3px solid #0504aa;
        }
       .kvadrat:focus{
           outline: none;
       }

    </style>
</head>

<body>
    <div class="blok">
        <button class="kvadrat aktiv"></button>
        <button class="kvadrat"></button>
        <button class="kvadrat"></button>
    </div>
<script>
    let blok = document.querySelector(".blok");
    let buttons = blok.querySelectorAll(".kvadrat");

    let aktiv = ({target}) => {
        target = target.closest(".kvadrat");
        if(!target) return;
        buttons.forEach(button => button.classList.toggle("aktiv", button === target))
    }
    blok.addEventListener("click", aktiv);

</script>
</body>
</html>
Ответить с цитированием
  #6 (permalink)  
Старый 18.01.2021, 12:51
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,704

Id это имя конкретного элемента, что бы обращаться именно к нему.
Ну это как людям менять имена, что бы обращаться к любому из них только по определенному имени.
В вашем случае вполне подойдет класс
.aktiv{
border: 3px solid #0504aa;
}
Ответить с цитированием
  #7 (permalink)  
Старый 18.01.2021, 12:58
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

Сергей Ракипов,
или ещё проще ...
<!doctype html>
<html lang="ru">
<head>
    <meta charset="utf-8">
    <title>index</title>

    <meta name="viewport" content="width=device-width,initial-scale=1">
    <meta name="description" content="index">
    <meta name="Keywords" content="index">
    <style>
        .blok{
            width: 400px;
            height: 100px;
            margin: 10px auto;
            display: flex;
            justify-content: space-around;
        }
        .kvadrat{
            width: 100px;
            height: 100px;
            border: 3px solid #000;
        }
        .kvadrat.aktiv{
            border: 3px solid #0504aa;
        }
       .kvadrat:focus{
           outline: none;
       }

    </style>
</head>

<body>
    <div class="blok">
        <button class="kvadrat aktiv"></button>
        <button class="kvadrat"></button>
        <button class="kvadrat"></button>
    </div>
<script>
    let blok = document.querySelector(".blok");
    let current = document.querySelector(".blok .kvadrat.aktiv");
    let aktiv = ({target}) => {
        target = target.closest(".kvadrat");
        if(!target) return;
        current && current.classList.remove("aktiv");
        current = target;
        current.classList.add("aktiv")
    }
    blok.addEventListener("click", aktiv);

</script>
</body>
</html>
Ответить с цитированием
  #8 (permalink)  
Старый 18.01.2021, 13:11
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,704

А так было бы еще проще

<!doctype html>
<html lang="ru">
<head>
    <meta charset="utf-8">
    <title>index</title>
 
    <meta name="viewport" content="width=device-width,initial-scale=1">
    <meta name="description" content="index">
    <meta name="Keywords" content="index">
    <style>
        .blok{
            width: 400px;
            height: 100px;
            margin: 10px auto;
            display: flex;
            justify-content: space-around;
        }
        .kvadrat{
            width: 100px;
            height: 100px;
            border: 3px solid #000;
        }
        .kvadrat.aktiv{
            border: 3px solid #0504aa;
        }
       .kvadrat:focus{
           outline: none;
       }
 
    </style>
</head>
 
<body>
    <div class="blok">
        <button class="kvadrat aktiv"></button>
        <button class="kvadrat"></button>
        <button class="kvadrat"></button>
    </div>
<script>
    let blok = document.querySelector(".blok");
    let aktiv = function ({target}) {
        target = target.closest(".kvadrat");
        if(!target) return;
        this.querySelector(".aktiv").classList.remove("aktiv");
        target.classList.add("aktiv")
    }
    blok.addEventListener("click", aktiv);
 
</script>
</body>
</html>

Последний раз редактировалось voraa, 18.01.2021 в 13:16.
Ответить с цитированием
  #9 (permalink)  
Старый 18.01.2021, 13:21
Профессор
Отправить личное сообщение для Сергей Ракипов Посмотреть профиль Найти все сообщения от Сергей Ракипов
 
Регистрация: 01.06.2010
Сообщений: 651

рони,
voraa,
Спасибо за ответы
Ответить с цитированием
  #10 (permalink)  
Старый 18.01.2021, 13:31
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

voraa,
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Валидация jquery c button type=button designerandrey jQuery 4 09.11.2018 15:21
Как сделать чтобы в текст button менялось значение в зависимости от количества выбран mopsusha Общие вопросы Javascript 10 19.03.2018 20:16
обработка щелчка по button. тонкие различия с input type=button xtfkpi Events/DOM/Window 2 28.01.2015 23:32
элемент внутри кнопки button FanAizu (X)HTML/CSS 2 15.07.2014 20:44
Проблема radio button с кроссбраузерностью shkarbatov Javascript под браузер 0 28.07.2011 10:55