jQuery не работает во внешнем JavaScript

#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 , и это работает.