Не удается сохранить изменение CSS с помощью Javascript

#javascript #html #css

#javascript #HTML #css

Вопрос:

У меня есть простой «выбор» — показать ниже.

 <label>Best way to reach you?</label><br>
    <select id="contactMethod">
        <option value="wp">Work Phone?</option>
        <option value="cp">Personal Cell Phone?</option>
        <option value="email">Email?</option>
        <option value="Im">Instant Messanger?</option>
    </select>
<button onclick="showHidden()">Which way?</button>
  

объект, который я хочу показать, находится в HTML со следующими свойствами:

 <label>E-mail Address:</label>
<input id="email" type="text" style='display:none'>
  

Затем у меня есть файл .js со следующей функцией.

 function showHidden() {
    var dropSelection = document.getElementById("contactMethod").value;
    console.log(dropSelection)

    if(dropSelection == "email") {
        document.getElementById("email").style.display = "block";
    }
}
  

Затем у меня есть идентификатор, указанный в моем CSS следующим образом:

 #email{ display:none; }
  

Цель состоит в том, чтобы «показать» текстовое поле электронной почты, когда выбран параметр «электронная почта» из приведенных <select> выше.

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

ОБНОВЛЕННЫЙ КОД

 <label>Best way to reach you?</label><br>
    <select onchange="showHidden()"  id="contactMethod">
        <option value="select">Select...</option>
        <option value="email">Email</option>
        <option value="phone">Work Phone</option>
        <option value="cPhone">Cell Phone</option>
        <option value="Im">Instant Messanger</option>
    </select>
  

ИЗМЕНЯЕМЫЕ ПОЛЯ

 <label id="emailLabel">E-mail Adress:</label>
<input id="email" type="text">
<label id="phoneLabel">Work Phone Number</label>
<input id="phone" type="text">
<label id="cPhoneLabel">Personal Cell Phone Number</label>
<input id="cPhone" type="text">
<label id="IMLabel">Instant Messenger Name</label>
<input id="Im" type="text">
  

JS

 function showHidden() {
    var dropSelection = document.getElementById("contactMethod").value;

    if(dropSelection == "email") {
        document.getElementById("email").style.display = "block";
        document.getElementById("emailLabel").style.display = "inline";
    }
    else if(dropSelection == "phone") {
        document.getElementById("phone").style.display = "block";
        document.getElementById("phoneLabel").style.display = "inline";
    }
    else if(dropSelection == "cPhone") {
        document.getElementById("cPhone").style.display = "block";
        document.getElementById("cPhoneLabel").style.display = "inline";
    }
    else if(dropSelection == "Im") {
        document.getElementById("Im").style.display = "block";
        document.getElementById("IMLabel").style.display = "inline";
    }   
}
  

Комментарии:

1. Вы можете использовать hide() / show() .

2. Зачем нажимать кнопку для события? У вас должен быть EventListener для события изменения выпадающего списка. Вы также можете просто переключить класс css, который имеет свойство display: none.

3. Я пытался возиться с событием onchange, но, похоже, это не работает. У меня он установлен следующим образом: <select onchange=»showHidder()» id =»contactMethod»> <значение параметра =»email»> Электронная почта?</option> </select>

4. Кажется, работает onchange. Спасибо за предложение!

Ответ №1:

 function showHidden(){
    var dropSelection = document.getElementById("contactMethod").value;
    console.log(dropSelection)

    if(dropSelection == "email"){
        document.getElementById("email").style.display = "block";
    }
}  
 #email{
   display:none;
}  
 <label>Best way to reach you?</label>
<br>
<select id="contactMethod">
  <option value="wp">Work Phone?</option>
  <option value="cp">Personal Cell Phone?</option>
  <option value="email">Email?</option>
  <option value="Im">Instant Messanger?</option>
</select>
<br>
<button onclick="showHidden()">Which way?</button>
<br>
<label>E-mail Adress:</label>
<br>
<input id="email" type="text" display="none">
<br>  

Я не вижу никаких проблем, все работает нормально.

Комментарии:

1. Я не понимаю… когда я тестирую его в chrome, он мигает текстовым полем, а затем снова скрывается ….. Я вижу, что он выдает «электронное письмо» в консоли Chrome, но это похоже на то, что css не сохраняет изменения, внесенные с помощью оператора if.

2. Я попробовал код в jsfiddle, и консоль продолжала говорить, что «showHidden» не объявлен…..

3. Я не получаю ошибок, похоже, что он просто не сохраняет недавно измененное свойство css. Вот почему я еще больше запутался.

4. В js fiddle это не будет работать таким образом. Я не понимаю, почему это происходит, это довольно странно