Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Проблема с css (https://javascript.ru/forum/misc/70085-problema-s-css.html)

Stownheidg 09.08.2017 06:12

Проблема с css
 
Здравствуйте! Проблема вот в чем: мне нужно, чтобы при нажатии на чекбокс исчезало поле для ввода, но если я задаю стили через внешний файл стилей, то для того, чтобы оно исчезло, мне нужно нажать 2 раза, если же указать стили в html через style="", то все работает как надо. Вот пример:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <link rel="stylesheet" href="1.css">
</head>
<body>
  <div>
   <input type="checkbox" id="check">
   <label for="check">OK</label>
   <input type="text" id="txt" style="display: none">
    </div>
<script type="text/javascript" src="1.js"></script>
</body>
</html>

Файл 1.js:
var gg = document.getElementById("check");
gg.addEventListener("click", click);

function click(){
    var dd1 = document.getElementById("txt").style.display;
    
    if(dd1=="none"){
        document.getElementById("txt").style.display="block";
    }else{
        document.getElementById("txt").style.display="none";
    }
}

Сверху все работает как надо, но если убрать style="display: none" из html, то работать будет криво:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <link rel="stylesheet" href="1.css">
</head>
<body>
  <div>
   <input type="checkbox" id="check">
   <label for="check">OK</label>
   <input type="text" id="txt">
    </div>
<script type="text/javascript" src="1.js"></script>
</body>
</html>

Файл 1.js:
var gg = document.getElementById("check");
gg.addEventListener("click", click);

function click(){
    var dd1 = document.getElementById("txt").style.display;
    
    if(dd1=="none"){
        document.getElementById("txt").style.display="block";
    }else{
        document.getElementById("txt").style.display="none";
    }
}

Файл 1.css:
#txt{
    display: none;
}

Как это исправить, если писать css код в html я не хочу?

laimas 09.08.2017 07:38

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <!--<link rel="stylesheet" href="1.css">-->
<style>
#txt {
    display: none;
}
</style>    
</head>
<body>
  <div>
   <input type="checkbox" id="check">
   <label for="check">OK</label>
   <input type="text" id="txt">
    </div>
<!--<script type="text/javascript" src="1.js"></script>-->
<script>
document.getElementById('check').onclick = function() {
    document.getElementById('txt').style.display = ['none', 'block'][+this.checked]
}
</script>
</body>
</html>

ksa 09.08.2017 08:42

Цитата:

Сообщение от Stownheidg
но если убрать style="display: none" из html, то работать будет криво

Так это сразу видно из твоего алгоритма. :)
Цитата:

Сообщение от Stownheidg
var dd1 =
document.getElementById("txt").style.display;
if(dd1=="none"){...}

Но если изменить условие
document.getElementById("txt").style.display;
if(dd1!="none"){...}

Или, что еще лучше, перейти на классы - все будет работать. ;)

Stownheidg 09.08.2017 18:29

Цитата:

Сообщение от ksa (Сообщение 461047)
Но если изменить условие
document.getElementById("txt").style.display;
if(dd1!="none"){...}

Или, что еще лучше, перейти на классы - все будет работать. ;)

Спасибо :) , но почему с классами будет работать? Я пробовал сделать через классы, все точно так же

ksa 10.08.2017 08:25

Цитата:

Сообщение от Stownheidg
Я пробовал сделать через классы, все точно так же

Значит опять алгоритм не правильный использовал...

Цитата:

Сообщение от Stownheidg
но почему с классами будет работать?

Я имел ввиду, что, такого рода работа, с классами более предпочтительна, нежели с атрибутом style.
Но бывает, что только через style можно решить задачу...


Часовой пояс GMT +3, время: 16:22.