PHP выбрать onchange не работает

0

Поэтому я создаю <select id="VersionDropdown" onchange="change(this)"></select> внутри php файла, который затем втягивается в другой php-документ через теги include. Проблема, с которой я сталкиваюсь, заключается в том, что onchange никогда не запускается. Я пробовал использовать jQuery.change(), но без успеха.

Я использую jQuery 1.9.1

PHP:

<?php
    // Build the dropdown menu based on files on the server

    $dropdown = '<select id="VersionDropdown" onchange="change(this)">';
    $path = './myPath/';
    $blacklist = array('.', '..', 'SQL Files');

    foreach (new DirectoryIterator($path) as $root) {
        if($root->isDot()) continue;
        $path2 = $path . $root . '/';
        $MajorVersion = $root->getFilename();
        $MajorVersion = str_replace('v', 'Version ', $MajorVersion);
        if(fnmatch('Version 3.1', $MajorVersion)){ $MajorVersion = str_replace('Version', 'Analog Version', $MajorVersion); }
        //$versions[$MajorVersion] = array();
        $dropdown .= '<optgroup label="' .$MajorVersion. '">';

        foreach (new DirectoryIterator($path2) as $folder) {
            if($folder->isDot()) continue;

            $item = $folder->getFilename();
            //$versions[$MajorVersion][$item] = array();

            if ($handle = opendir($path2 . $item)) {
                while (false !== ($file = readdir($handle))) {
                    if (!in_array($file, $blacklist)) {
                        if(fnmatch("*.txt", $file)) {
                            $fileNew = str_replace('.txt', '', $file);
                            $versions[$MajorVersion][$item]['Version'] = $fileNew;
                            $dropdown .= '<option value="' .str_replace('Web', '', $item). '">' .$fileNew. '</option>';
                        }else{
                            $versions[$MajorVersion][$item][str_replace('.exe', '', $file)] = $file;
                        }
                    }
                }
            }
            closedir($handle); 
        }
    }
    $dropdown .= '</optgroup>';
    //print_r($versions);
    $dropdown .= '</select>';

    echo $dropdown;
?>

HTML/PHP

<html>
<title>Test Script</title>
<head>
  <meta http-equiv="Content-type" content="text/html;charset=UTF-8" />
  <title>Test</title>
  <script src="http://code.jquery.com/jquery-1.9.1.js"></script>
<script>

 function change(version){
    alert(version);
}

$( document ).ready(function() {

}); 

</script>
</head>
<body>
    <?php include './php/version_dropdown.php'; ?>
</body>
</html>

Версия version_download.php:

<select id="VersionDropdown" onchange="change(this)">
    <optgroup label="Version 5.5">
        <option value="55249">5.5.24.9</option>
        <option value="55225">5.5.22.5</option>
        <option value="55205">5.5.20.5</option>
        <option value="55183">5.5.18.3</option>
        <option value="55163">5.5.16.3</option>
        <option value="55141">5.5.14.1</option>
        <option value="55122">5.5.12.2</option>
        <option value="55106">5.5.10.6</option>
    </optgroup>
    <optgroup label="Version 5.0">
        <option value="50016">5.0.0.16</option>
        <option value="50018">5.0.0.18</option>
        <option value="50022">5.0.0.22</option>
        <option value="50024">5.0.0.24</option>
        <option value="50284">5.0.28.4</option>
        <option value="50304">5.0.30.4</option>
        <option value="50321">5.0.32.1</option>
        <option value="50343">5.0.34.3</option>
        <option value="50403">5.0.40.3</option>
    </optgroup>
    <optgroup label="Version 4.3">
        <option value="43062">4.3.0.62</option>
        <option value="43064">4.3.0.64</option>
        <option value="43066">4.3.0.66</option>
    </optgroup>
    <optgroup label="Version 4.2">
    </optgroup>
    <optgroup label="Analog Version 3.1">
    </optgroup>
</select>
  • 1
    Поскольку php работает на стороне сервера, неясно, что это может сработать, если вы не покажете больше кода. Как вы называете php-код на сервере, когда выбор меняется?
  • 1
    Не могли бы вы опубликовать код HTML/PHP ? Мы не можем угадать ответ ..
Показать ещё 6 комментариев
Теги:

5 ответов

0

Наконец я понял. По какой-то причине ХРОМЕ не стрелял в событие onchange !. Я перезапустил хром, и он внезапно начал работать. ЛАМЕ.

У меня были случайные проблемы, подобные этому в прошлом, когда кажется, что Chrome внезапно начинает кешировать JS../facepalm

0

Я вставил вывод вашего php-кода в источник html, который вы показали, дав мне что-то, что почти сработало. Все, что я тогда должен был сделать, это написать alert(version.value); вместо alert(version); , и я был в бизнесе. Я не понимаю, почему это не работает для вас - пожалуйста, подтвердите, что это работает для вас или сравнивается с исходным кодом, который вы действительно получаете с сервера:

<html>
<title>Test Script</title>
<head>
  <meta http-equiv="Content-type" content="text/html;charset=UTF-8" />
  <title>Test</title>
  <script src="http://code.jquery.com/jquery-1.9.1.js"></script>
<script>

 function change(version){
    alert(version.value);  // <<<<<<<< this line was changed >>>>>>>>>>>
}

$( document ).ready(function() {

}); 

</script>
</head>
<body>
<!-- <<<<<<<<<<<<<< inserted php generated code here as plain text >>>>>>>>>>>> -->
<select id="VersionDropdown" onchange="change(this)">
    <optgroup label="Version 5.5">
        <option value="55249">5.5.24.9</option>
        <option value="55225">5.5.22.5</option>
        <option value="55205">5.5.20.5</option>
        <option value="55183">5.5.18.3</option>
        <option value="55163">5.5.16.3</option>
        <option value="55141">5.5.14.1</option>
        <option value="55122">5.5.12.2</option>
        <option value="55106">5.5.10.6</option>
    </optgroup>
    <optgroup label="Version 5.0">
        <option value="50016">5.0.0.16</option>
        <option value="50018">5.0.0.18</option>
        <option value="50022">5.0.0.22</option>
        <option value="50024">5.0.0.24</option>
        <option value="50284">5.0.28.4</option>
        <option value="50304">5.0.30.4</option>
        <option value="50321">5.0.32.1</option>
        <option value="50343">5.0.34.3</option>
        <option value="50403">5.0.40.3</option>
    </optgroup>
    <optgroup label="Version 4.3">
        <option value="43062">4.3.0.62</option>
        <option value="43064">4.3.0.64</option>
        <option value="43066">4.3.0.66</option>
    </optgroup>
    <optgroup label="Version 4.2">
    </optgroup>
    <optgroup label="Analog Version 3.1">
    </optgroup>
</select>
</body>
</html>

Только одно другое наблюдение (которое я предполагаю, что это опечатка, но, возможно, это источник вашей проблемы). Вы #include version_dropdown.php, но вы вызываете файл, содержимое которого вы показываете version_download.php. Опечатка? Или источник вашей проблемы... Я должен поверить, что это опечатка.

0

Вы отправляете объект функции onchange="change(this)"

Изменить функцию:

function change(version){
    alert(version.value);
}

Или измените onchange на

onchange="change(this.value)"

jQuery не требуется для вышеуказанного.

ПРИМЕЧАНИЕ. Должно быть сделано только одно из приведенных выше изменений. Если вы сделаете оба, вы будете ошибками

0

Попробуйте это (Отредактировано):

$("#VersionDropdown>optgroup>option").on('click', function(event) {
    alert($(this).text());
});

Когда вы вставляете элемент, после того, как документ заряжен, вы должны использовать .on() или .live() чтобы заставить его работать.

Дополнительная информация @jQuery

  • 0
    Это, похоже, не работает либо ..
  • 0
    Как насчет $(document).on('change',"#VersionDropdown", function(){... вы пробовали этот метод?
Показать ещё 7 комментариев
0

Вы пробовали что-то вроде этого?

 $("#VersionDropdown").change(function(){
        if($(this).val() == "something") {
              //do something
        }
    });
  • 0
    Я попытался использовать jQuery.change (), но безуспешно. вероятно, решает эту проблему
  • 0
    добавьте свой код в jsfidlle или опубликуйте его здесь ...
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню