Сохранить несколько вариантов выпадающего в массиве - PullRequest
1 голос
/ 18 апреля 2019

Я генерирую вопросы из базы данных, где пользователь выбирает ответ в раскрывающемся меню. Когда пользователь выбирает определенную опцию, предложение будет выдвинуто в массив, инициирующий событие изменения JavaScript.Когда пользователь завершит все вопросы, я отправлю массив в виде строки в базу данных из формы, в которой хранятся все предложения.

Когда я пытаюсь отправить предложение. Предложение выдвигается с первого раза. Нокогда пользователь меняет ответы, массив снова выдвигается с повторяющимся сообщением

    var suggestions=[];

    function sendSuggestion() {
        if (document.getElementById("1").value == "no" && document.getElementById("2").value == "no"  ){
            suggestions.push("you need to study more");


        }


    }
</script>    
<form action="">
@foreach ($questions as $question)


        {{-- <p>{{$question->id}}){{$question->english}}</p> <br> --}}


            <div class="form-group">
                <label>{{$question->id}}) {{$question->english}}</label>
                <select id="{{$question->id}}" onchange="sendSuggestion()" class="form-control" id>
                        <option value="yes">Yes</option>
                        <option value="no">No</option>
                        <option value="regularly">Regularly</option>
                        <option value="sometimes">Sometimes</option>
                    </select>


            </div>


@endforeach

</form>

Я ожидаю вывод «вам нужно больше учиться», когда пользователь выбирает «нет» с идентификаторами 1 и 2.

Ответы [ 2 ]

1 голос
/ 18 апреля 2019

Обновите вашу javascript функцию:

    function sendSuggestion() {
    if (document.getElementById("1").value == "no" && document.getElementById("2").value == "no"  ){
        if (suggestions.indexOf("you need to study more") == -1){
            suggestions.push("you need to study more");
        }
    }

    if (document.getElementById("1").value == "yes" && document.getElementById("2").value == "yes"  ){
        var index = suggestions.indexOf("you need to study more");

        if (index > -1) {
           suggestions.splice(index, 1);
        }
    }
}

Это разрешит различные предложения в вашем массиве, без дубликатов.

0 голосов
/ 18 апреля 2019

Если вам не требуется хранение нескольких предложений, вы можете установить пустой массив при каждом вызове функции.

var suggestions=[];

function sendSuggestion() {
    // here will work
    suggestions = [];
    if (document.getElementById("1").value == "no" && document.getElementById("2").value == "no") {
        // or if you only want to set to empty if the conditional passes you can do it here
        suggestions = [];
        suggestions.push("you need to study more");
     }
}

Если вам нужно или вы хотите сохранить массив заполненным, вы можете проверить наличие определенного элемента. Вместо повторной инициализации массива в вашем условном выражении вы запустите этот

let index = suggestions.indexOf("you need to study more");
// negative one is returned if the item is not found
// if it's found we'll remove it from the array
if (index > -1) suggestions.splice(index, 1);

Документация //

Array.splice () - https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/splice

Array.indexOf () - https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf

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