почему не работает функция изменения jquery

0

У меня очень простая страница, но она не работает, и я не понимаю, почему.

<head>
<script src='js/jquery-1.11.0.js'></script>

<script>
    $('#uno').change(function() {alert('ok');});
</script>
</head>

<body>
<form name='input' id='formgraph'>
<select id='uno' name='uno'>
<option value='1'>1</option>
<option value='2'>2</option>
</form>
</body>

Поэтому он должен предупреждать о том, когда я изменяю значение, но он не делает этого, и я не понимаю, почему.

  • 0
    Поместите скрипт в конец тега body, DOM еще не готов.
  • 1
    используйте $(document).ready() или запустите скрипт после визуализации элемента.
Показать ещё 2 комментария
Теги:

3 ответа

1
Лучший ответ

Вы должны поместить свой код javascript либо в конец документа (после <body>), либо в $(document).ready(function(){});

Как это:

<head>
    <script src='js/jquery-1.11.0.js'></script>
</head>
<body>
    <form name='input' id='formgraph'>
        <select id='uno' name='uno'>
            <option value='1'>1</option>
            <option value='2'>2</option>
        </select>
    </form>
</body>
<script>
    $('#uno').change(function() {alert('ok');});
</script>

Или это:

<head>
    <script src='js/jquery-1.11.0.js'></script>
    <script> <!-- You might want to put this, too after your </body> -->
        $(document).ready(function()
        {
            $('#uno').change(function() {alert('ok');});
        }
    </script>
</head>
<body>
    <form name='input' id='formgraph'>
        <select id='uno' name='uno'>
            <option value='1'>1</option>
            <option value='2'>2</option>
        </select>
    </form>
</body>

Вы также можете поместить свой javascript в другой файл, а не в середине вашего HTML.

У вас также была недопустимая разметка, потому что вы не закрыли <select>, я исправил его в своих примерах.

  • 0
    Большое спасибо, это все решило.
1

Он рекомендовал загрузить js в конце страницы. Вы забыли закрыть теги select и html.

</head>

<body>
<form name='input' id='formgraph'>
<select id='uno' name='uno'>
<option value='1'>1</option>
<option value='2'>2</option>
</select>
</form>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
<script>
    $('#uno').change(function() {alert('ok');});
</script>
</body>
</html>
1

У вас есть два варианта.

Вы можете использовать готовый документ:

$(document).ready(function() {
    $('#uno').change(function(){
        alert('ok');
    });
});

Которая будет ждать, пока документ будет готов, прежде чем запускать код в тегах скрипта.

Или (ИМО - лучший вариант) - разместить свой тег скрипта в конце тела:

<head>

</head>

<body>
<form name='input' id='formgraph'>
<select id='uno' name='uno'>
<option value='1'>1</option>
<option value='2'>2</option>
</form>

<script src='js/jquery-1.11.0.js'></script>
<script>
    $('#uno').change(function() {alert('ok');});
</script>
</body>

Это приведет к такому же эффекту с меньшим количеством кода. Так как тег сценария ниже в документе, а браузер читает сверху вниз по порядку - содержимое тега скрипта будет работать до тех пор, пока остальная часть документа не будет готова.

Корень проблемы состоит в том, что вы не можете выбрать $ ('# uno') до тех пор, пока он не будет существовать в документе.

Ещё вопросы

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