Как использовать innerHTML с JavaScript-оператором if / else и выпадающим меню Bootstrap 4 - PullRequest
0 голосов
/ 24 июня 2018

Мое приложение почти готово, у меня просто возникают проблемы с включением операторов innerHTML, когда пользователь не выбирает элемент из моих двух выпадающих меню. В настоящее время я знаю, как сделать это с оповещениями, но я хочу, чтобы сообщение появлялось на самой странице, когда пользователь не делает выбор. Я новичок в JS - я понимаю, что это будет включать в себя innerHTML с операторами if / else, однако у меня возникают некоторые проблемы с поиском правильного способа сделать это.

Цель: если пользователь не выбирает цвет глаз в раскрывающемся меню при нажатии кнопки ОТПРАВИТЬ, в сообщении innerHTML должно появиться сообщение «Пожалуйста, выберите цвет глаз».

Иначе, если, Если пользователь не выбирает тон кожи в раскрывающемся меню при нажатии кнопки ОТПРАВИТЬ, в сообщении innerHTML должно появиться сообщение «Пожалуйста, выберите тон кожи».

Иначе, если пользователь не выбирает цвет глаз && skintone из выпадающего меню при нажатии кнопки SUBMIT, то в сообщении innerHTMl должно быть указано «Пожалуйста, выберите цвет глаз и оттенок кожи».

Вот мой HTML и JS enter image description here код:

        <h3 class="display-4" style="font-size: 1.5rem;">What is your eye color</h3>
    <div class="dropdown">
        <div class="input-group justify-content-center">
            <div class="input-group-btn">
                <button class="btn btn-info btn-md dropdown-toggle" type="button" id="dropdownMenuButton" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" style="background-color: #588c7e;">
                    Eye Color

                </button>

                <div class="dropdown-menu" onchange="selectMenu1" aria-labelledby="dropdownMenuButton" id="eyeColor">
                    <a class="dropdown-item" href="#" data="brown" ><img src="img/brown_eye.jpg" class="rounded-circle"> Brown</a>
                    <a class="dropdown-item" href="#" data="blue" ><img src="img/blue_eye.jpg" class="rounded-circle" > Blue</a>
                    <a class="dropdown-item" href="#" data="green" ><img src="img/green_eye.jpg" class="rounded-circle" > Green</a>
                    <a class="dropdown-item" href="#" data="hazel" ><img src="img/hazel_eye.jpg" class="rounded-circle" > Hazel</a>
                </div>

            </div>
        </div>
    </div>

    <!--Drop down Item 2-->

    <h3 class="display-4" style="font-size: 1.5rem;"> What is your skin tone</h3>
    <div id="menu2" class="dropdown">
        <div class="input-group justify-content-center">
            <div class="input-group-btn">
                <button class="btn btn-info btn-md dropdown-toggle" type="button" id="dropdownMenuButton" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" style="background-color: #588c7e;">
                    Skin Tone
                </button>

                <div class="dropdown-menu" onchange="selectMenu2"  aria-labelledby="dropdownMenuButton">
                    <a class="dropdown-item" href="#" data="fair"><img src="img/fair.jpg" class="rounded-circle" > Fair</a>
                    <a class="dropdown-item" href="#" data="light"><img src="img/light.jpg" class="rounded-circle" > Light</a>
                    <a class="dropdown-item" href="#" data="medium"><img src="img/medium.jpg" class="rounded-circle" > Medium</a>
                    <a class="dropdown-item" href="#" data="bronze"><img src="img/bronze_dark.jpg" class="rounded-circle" > Bronze</a>
                    <a class="dropdown-item" href="#" data="tan"><img src="img/tan.jpg" class="rounded-circle" > Tan</a>
                    <a class="dropdown-item" href="#" data="rich"><img src="img/dark.jpg" class="rounded-circle" > Rich</a>
                </div>

            </div>
        </div>
    </div>

    <br>

    <!--Result Button-->

    <button type="button" class="btn btn-info btn-lg active" title ="Submit" style="background-color: #3e4444;" onclick="validate()" id="demo"><i class="fas fa-arrow-circle-right fa-lg"></i></button>

<script>
function validate() {
    var eyeColor;
    var skinTone;

    if(!eyeColor){
        document.getElementById("eyeColor").innerHTML = "Please select an eye color";
    } else if (!skinTone){
        document.getElementById("skinTone").innerHTML = "Please select a skin tone";
    }

}
</script>

Ответы [ 3 ]

0 голосов
/ 24 июня 2018

В вашем методе validate() вы создаете две переменные с именами eyeColor и skinTone, никогда не устанавливая их значений, также ваши два оператора if проверяют, имеют ли переменные значение, которого у них нет, таким образом innerHTML никогда не будетбыть пораженным.

Вам также необходимо создать элемент, в который должно быть помещено сообщение, поскольку вы собираетесь перезаписать все дочерние элементы.

Например, создайте элемент метки передКнопка отправки.

<label id="error"></label>

Вы должны создать две глобальные переменные и установить их как пустую строку.

var eyeColor = '';
var skinTone = '';

Вам не хватает идентификатора для второго выпадающего меню.Добавьте id="skinTone" к элементу div.

Удалите две функции onchange, так как они не будут работать с элементами <div>: selectMenu1() и selectMenu2().Однако создайте дополнительную функцию, которая устанавливает значение для переменных eyeColor и skinTone.Для каждого элемента <a> в раскрывающихся меню установите href на href="javascript:setMenuValue(this)".

function setMenuValue(obj)
{
    if (obj !== undefined)
    {
        if (obj.parentElement.id == 'eyeColor')
        {
            // Update the global variable eyeColor
            eyeColor = obj.getAttribute('data');
        }
        else if (obj.parentElement.id == 'skinTone')
        {
            // Update the global variable skinTone
            skinTone = obj.getAttribute('data');
        }
    }
}

Измените свой метод validate() следующим образом:

function validate() {   
      // Show error if the eyeColor or skinTone variables are still an empty string
      if(eyeColor == ''){
        document.getElementById("error").innerHTML = "Please select an eye color";
    } else if (skinTone == ''){
        document.getElementById("error").innerHTML = "Please select a skin tone";
    }

}
0 голосов
/ 26 июня 2018

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

HTML:

<div class ="dropdown-menu" id="eyeColor">

Я добавил это к каждому из моих выпадающих списков

<div class="error" id="error"></div>

Тогда мойJS-

Я избавился от этого:

function validate() {
    var eyeColor;
    var skinTone;

и добавил это:

if (!eyeColor){
  document.getElementById("error").innerHTML = "<span class='error'>Please choose an eye color</span>";
}
else if (!skinTone){
  document.getElementById("error").innerHTML = "<span class='error'>Please choose a skin tone</span>";
}

}

Я решил немного его стилизовать,Я добавил диапазон с классом «error» и сделал это в своем CSS:

.error {
  color: #000000;
  font-size: 20px;
  padding-top: 6px;
  padding-bottom: 5px;
}

Работает как шарм!Как я и надеялся!

0 голосов
/ 24 июня 2018

То, что вы делаете здесь, перезаписывает innerHTML вашего div eyeColor, поэтому он удалит все ваши ссылки.Чтобы отобразить сообщение об ошибке, просто поместите тег ap под div, ничего внутри и не перезапишите его содержимое.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...