#javascript #jquery #html
#javascript #jquery #HTML
Вопрос:
Я новичок в jQuery и застрял на какой-то странной проблеме. Я использую методы jQuery change
и click
. Они отлично работают при использовании в моем HTML-файле в <script>
теге.
Нравится:
<script>
$("select,input").change(function ()
{
// My code and some alerts
});
</script>
Когда я скопировал то же самое во внешнем JavaScript-коде без <script>
и импортировал это в свой HTML, это вообще не работало.
Есть ли какие-либо изменения, которые необходимы для использования jQuery во внешнем JavaScript-коде?
PS: Некоторые другие функции, отличные от jQuery, присутствующие в том же внешнем коде JavaScript, успешно вызываются из HTML.
Комментарии:
1. Как вы связываете внешний js со страницей?
2. Использование
<SCRIPT language="JavaScript" SRC="jscript/myExternalJs.js"></SCRIPT>
Ответ №1:
Во-первых, вам не нужен тег <script> во внешнем файле JavaScript, если я так читаю ваш пост.
Хитрость с jQuery заключается в том, что ваш код настроен на немедленное выполнение.
Вы хотите обернуть свой скрипт так, чтобы он загружался, когда документ будет готов, чем-то вроде:
$(document).ready(function(){
$("select,input").change(function ()
{
// My code and some alerts
})
});
И вы хотите убедиться, что ваш файл загружен после jQuery (в противном случае значение $ global не будет установлено).
Дополнения:
Вот как должен выглядеть ваш HTML:
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js"></script>
<script type="text/javascript" src="jscript/myExternalJs.js"></script>
Вот как должен выглядеть ваш код JavaScript (обратите внимание, что внутри файла JavaScript нет тега script):
$(document).ready(function(){
$("select,input").change(function ()
{
// My code and some alerts
})
// Other event handlers.
});
Что касается вашего другого скрипта … это как бы зависит от того, что вы делаете. Самое главное — не пытаться подключать прослушиватели событий к объектам, которые еще не существуют, вот почему мы используем document.ready
.
Комментарии:
1. Да, я хочу удалить
<script>
тег из HTML-файла. Итак, мне нужно добавить$(document).ready(fucntion(){...})
. Что, если у меня есть несколько методов? Должен ли я добавить их в$(document).ready(fucntion(){...})
?2. Как насчет других функций, отличных от jquery, должен ли я добавить их в
document.ready
?3. Вероятно, вам это не нужно, нет. Хотя это может быть хорошей практикой, в противном случае вы загрязняете глобальное пространство имен. Но это уже другая тема. Пока не беспокойтесь об этом.
4. @John: Один вопрос просто из любопытства. Я попытался загрузить внешний js (как есть, без document.ready) после
body
тега, и это также работает. Но мне интересно, является ли хорошей практикой загружать js в конце страницы?5. Несколько лет назад все рекомендовали использовать нижнюю часть страницы, но это несколько ослабло. Вы можете сделать либо то, либо другое, но я принадлежу к школе, которая считает, что скрипт должен находиться в начале документа.
Ответ №2:
Вы убедились, что jquery определен перед вашим собственным кодом jquery?
Вы также должны убедиться, что DOM готов при работе с jquery:
$(document).ready(function() {
$("select,input").change(function() {
// my code and some alerts
});
// more code here if needed, etc.
});
Комментарии:
1. Я просто скопировал тот же код, что присутствует в моем HTML-файле, во внешний js. И не могли бы вы, пожалуйста, сказать мне, как определить jquery во внешнем js?
2. @Ajinkya вам не нужно определять во внешнем JS, просто привяжите jquery.*.js к вашему HTML. он будет автоматически объединен.
3. Не определяйте его во внешнем JS, поместите тег <script src=»…»> для jquery в свой HTML, но убедитесь, что он логически создан до того, как вы опубликовали javascript.
4. @Ravi, dtbarna: Спасибо за предложения, понял 🙂 Добавлено
document.ready
, и это работает.