Выбранное раскрывающееся меню

Мне нужно изменить параметры раскрывающегося списка в соответствии с выбором. Я хотел бы использовать выбранный раскрывающийся список.

https://harvesthq.github.io/chosen/

Я сделал скрипку, и она отлично работает.

https://jsfiddle.net/3hkhcycg/12/

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

Вот как и где я включаю вещи.

В конце тега head:

<link rel="stylesheet" href="../Libs/chosen_v1.6.2/docsupport/prism.css">
<link rel="stylesheet" href="../Libs/chosen_v1.6.2/chosen.css">

Где-то перед головой

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script src="../Libs/chosen_v1.6.2/chosen.jquery.js" type="text/javascript"></script>
<script src="../Libs/chosen_v1.6.2/docsupport/prism.js" type="text/javascript" charset="utf-8"></script>
//HTML code that describes my elements
//JS code in a script tag with jquery

Я заметил, что:

  • if I put JS code inside $(document).ready
    • it gives an error: Uncaught TypeError: $(...).chosen is not a function
  • if it's outside $(document).ready
    • there is no error, the drop-down field looks like a chosen drop-down, but it doesn't change the content according to selection.
  • if it's outside $(document).ready and I remove $(".chosen_class").chosen({ width:"90%"})
    • it changes the content but, of course, it does not look like a chosen drop-down

Обновление: мне нужны раскрывающиеся списки для всплывающего окна, которое активируется из класса JS. Кода много, я покажу здесь соответствующий.

MyClass.prototype.showPopUp= function(){
     document.getElementById('my_div').style.display = "block";
}
<div id="my_div" style = "display:none;">
    <form>
        <select id="select1" >
            <option value=""></option>
            <option value="A">A</option>
            <option value="B">B</option>
            <option value="C">C</option>
        </select>
        <select id="select2" class="chosen_class" data-placeholder="Select here" multiple>
        </select>
    </form>
</div>

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/chosen/1.1.0/chosen.jquery.min.js"></script>
<script>
$(document).ready(function () {
    $(".chosen_class").chosen({
        width:"90%"
    });
    $("#select1").change(function () {
        var letter = $(this).val();
        $('#select2').empty();
        if (letter == "A") {
            $('#select2')
                .append("<option value='letter A'>letter A</option>")
                .trigger("chosen:updated");
        } else if (letter == "B") {
            $('#select2')
                .append("<option value='letter B'>letter B</option>")
                .trigger("chosen:updated");
        } else if (letter == "C") {
            $('#select2')
                .append("<option value='letter C'>letter C</option>")
                .trigger("chosen:updated");
        }
    });
});

Все находится в myFile.php. Я включаю этот файл в свой проект следующим образом:

           <?php require_once(ROOTPATH."/myFile.php"); ?>
     </body>
</html>

person Newbie    schedule 19.12.2016    source источник
comment
Что вы имеете в виду, когда пишете, что добавляете ссылки на библиотеки jquery Где-то перед головой? Он должен быть частью раздела head или, что еще лучше, непосредственно перед закрытием раздела body (строки перед ‹/body›).   -  person codemonkey65    schedule 19.12.2016
comment
Все, что я сказал, это Где-то перед head, оно записано в другом файле и включено в require_once, до того, как запустится ‹head›. Итак, вы говорите, что я должен поместить все библиотеки в конец раздела body. Где я должен включить свой HTML-код? Имеет ли значение порядок: код HTML, код JS?   -  person Newbie    schedule 19.12.2016
comment
Я пытался вставить этот <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script> <script src="../Libs/chosen_v1.6.2/chosen.jquery.js" type="text/javascript"></script> <script src="../Libs/chosen_v1.6.2/docsupport/prism.js" type="text/javascript" charset="utf-8"></script> непосредственно перед закрытием раздела body. И выдает эту ошибку: Uncaught TypeError: $(...).chosen не является функцией   -  person Newbie    schedule 19.12.2016
comment
@Newbie: обновил мой ответ, чтобы проиллюстрировать, как вы должны это делать при создании шаблонов. Попробуйте и сообщите сообществу о результате. Надеюсь, это поможет решить вашу проблему!   -  person nyedidikeke    schedule 19.12.2016


Ответы (1)


Что ты должен делать:

<!DOCTYPE html>
<html>
<head>
    <title>Your page title</title>
    <!-- Your chosen.css file -->
</head>
<body>
    <!-- Your HTML and select element to be affected here -->


    <!-- jQuery library declaration here;
    please note: this should come before your chosen JavaScript files.
    The order is very important -->
    <!-- Your chosen JavaScript files here -->
    <!-- Then, initialise chosen here so as to affect your desired element -->
</body>
</html>

Подводя итог и в необходимом порядке, используя код из вашего общего jsfiddle и принимая во внимание ваше последнее обновление. при шаблонировании;

Здесь предполагается, что ваш основной файл называется index.php и находится на том же уровне каталога, что и ваш файл my с именем myFile.php, который должен содержать ваш фактический код; Таким образом, вы можете достичь своей намеченной цели следующим образом:

Содержимое вашего файла index.php:

<!DOCTYPE html>
<html>
<head>
    <title>Your page title</title>
    <link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/chosen/1.1.0/chosen.css">
</head>
<body>

<?php require_once("myFile.php"); ?>
</body>
</html>

Содержимое вашего файла myFile.php:

<div id="my_div" style = "display:none;">
    <form>
        <select id="select1" >
            <option value=""></option>
            <option value="A">A</option>
            <option value="B">B</option>
            <option value="C">C</option>
        </select>
        <select id="select2" class="chosen_class" data-placeholder="Select here" multiple>
        </select>
    </form>
</div>

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/chosen/1.1.0/chosen.jquery.min.js"></script>
<script>
    $(document).ready(function () {
        // All manipulation begins here.
        MyClass.prototype.showPopUp= function(){
            document.getElementById('my_div').style.display = "block";
        };

        $(".chosen_class").chosen({
            width:"90%"
        });
        $("#select1").change(function () {
            var letter = $(this).val();
            $('#select2').empty();
            if (letter == "A") {
                $('#select2')
                    .append("<option value='letter A'>letter A</option>")
                    .trigger("chosen:updated");
            } else if (letter == "B") {
                $('#select2')
                    .append("<option value='letter B'>letter B</option>")
                    .trigger("chosen:updated");
            } else if (letter == "C") {
                $('#select2')
                    .append("<option value='letter C'>letter C</option>")
                    .trigger("chosen:updated");
            }
        });
    });
</script>

Помните: для целей иллюстрации выше предполагается, что и index.php, и myFile.php расположены на одном уровне в выбранном вами каталоге.

person nyedidikeke    schedule 19.12.2016
comment
Я соблюдал ваши рекомендации, и результат выглядит как выбранный раскрывающийся список, но он не обновляет параметры, как говорит select1. Я вставил свой код (в следующем порядке: HTML, jquery libs, выбранные файлы JS, мой код JS, выбранный инициализировать) до конца тега body. У вас есть идеи, почему неправильно инициализировать выбранный внутри $(document).ready ? - person Newbie; 19.12.2016
comment
Только что обновил свой ответ иллюстрацией из вашего общего jsfiddle, следуя моей рекомендации; вы можете просто скопировать и вставить его, чтобы проверить его. - person nyedidikeke; 19.12.2016
comment
@Newbie: надеюсь, теперь это работает в вашем проекте! Если нет, то с какой проблемой вы сталкиваетесь? - person nyedidikeke; 19.12.2016
comment
Я проверяю это, и это то же самое поведение. Если я использую код из вашего ответа, я получаю эту ошибку: jquery.min.js:2 Uncaught TypeError: $(...).chosen is not a function at HTMLDocument.<anonymous> Если я использую код JS за пределами сайта $(document).ready, у меня больше нет ошибки, но у select2 нет никаких вариантов. - person Newbie; 19.12.2016
comment
@Newbie: при нормальных обстоятельствах вы не должны получать никаких ошибок, если реализовано, как указано выше. Не могли бы вы обновить свой пост, указав точно, как выглядит ваш код (как это происходит, когда вы получаете ошибку Uncaught TypeError: $(...).chosen is not a function)? - person nyedidikeke; 19.12.2016
comment
Я обновил свой вопрос и надеюсь, что контекст теперь лучше описан. Я использовал код из вашего ответа. - person Newbie; 19.12.2016
comment
Как вы ожидаете, что я помогу устранить неполадки, если вы не делаете то, что вас просят? Код, который вы обновили выше в своем посте, не завершен для возможной репликации! В любом случае, вы можете сделать это, если вам действительно нужно устранить неполадки, в противном случае приведенный выше ответ достаточен для решения проблемы, с которой вы сталкиваетесь, даже если он модульный как шаблон. Вашему вниманию: ошибка Uncaught TypeError: $(...).chosen is not a function, которую вы получаете, указывает на то, что ваш файл chosen.jquery.min.js не загружается. - person nyedidikeke; 19.12.2016
comment
@Newbie: внес небольшое обновление в мой пост (поместив код JavaScript в элемент <script>); вы проверяете историю редактирования. - person nyedidikeke; 19.12.2016
comment
Тем не менее, почему я получаю эту ошибку, когда у меня есть этот <script src="https://cdnjs.cloudflare.com/ajax/libs/chosen/1.1.0/chosen.jquery.min.js"></script> перед инициализацией выбранного элемента - person Newbie; 21.12.2016
comment
У вас не должно быть этой ошибки, если вы реализовали, как я описал в своем посте, если только вы не изменили его неподходящим образом @Newbi. Вы уверены, что поступаете правильно? Не могли бы вы поделиться структурой и содержимым иерархии ваших файлов (относящихся к этому сообщению). Вы можете прочитать Как создать минимальный, полный и проверяемый пример и соответствующим образом обновить свой пост. - person nyedidikeke; 21.12.2016