JSHint та jQuery: '$' не визначено


215

Наступні JS:

(function() {
  "use strict";

  $("#target").click(function(){
    console.log("clicked");
  });

}());

Врожайність:

test.js: line 5, col 3, '$' is not defined.

При підшивці за допомогою JSHint 0.5.5. Будь-які ідеї?


Ви додали jquery.jsна свою сторінку?
Рорі Маккросан

4
Що ж, якщо ви подаєте його саме цим кодом, $ це не визначено.
Pointy

У мене ця проблема в кутовій. Просто змініть $ на angular.element і jshint не попереджайте
Рафаель Вітор

Відповіді:


381

Якщо ви використовуєте відносно недавню версію JSHint, загальноприйнятим підходом є створення файлу .jshintrc в корені вашого проекту та введення цього конфігурації в нього:

{
    "globals": {
        "$": false
    }
}

Це заявляє JSHint, що $ є глобальною змінною, а помилка вказує на те, що її не слід перекривати.

Файл .jshintrc не підтримувався в дійсно старих версіях JSHint (наприклад, v0.5.5, як оригінальне запитання 2012 року). Якщо ви не можете або не хочете використовувати .jshintrc файл, ви можете додати це у верхній частині файлу сценарію:

/*globals $:false */

Існує також скорочений "jquery" варіант jshint, як показано на сторінці параметрів JSHint .


47
Цей параметр, jquery, просто визначає дві глобальні змінні, доступні лише для читання: $ та jQuery. Це скорочена версія /*global $:false, jQuery:false */.
Антон Ковальов

1
У моєму JSHint для Visual Studio опція називається "припустити jQuery"
Джовен

2
Прапор опції - це шлях. Для перших таймерів: додайте рядок 'jquery: true' у свій .jshintrc файл.
genkilabs

3
У чому причина ": false"? Я знайшов / * global $ * / працює чудово. (У моєму випадку в був / * глобальний jQuery * / хоча)
Michiel

чи є спосіб встановити це загально для всіх функцій в сценарії, а не вводити по черзі /* global ... */? Я, як правило, імпортую скрипт із усіма своїми функціями до своїх, mainтак що громіздко визначати по черзі ...
tsando

148

Ви також можете додати два рядки до свого .jshintrc

  "globals": {
    "$": false,
    "jQuery": false
  }

Це говорить jshint, що є дві глобальні змінні.


3
це має бути прийнятою відповіддю. забруднювати КОЖНИЙ ОДИН ФАЙЛ Javascript у вашому проекті різними рядками коду, щоб зробити синтаксисним шашку щасливим - це не варіант. Дякую wmil
Cosmin

51

Все, що вам потрібно зробити, це встановити "jquery": trueу вашому .jshintrc.

За посиланням на параметри JSHint :

jquery

Цей параметр визначає глобальні точки, відкриті бібліотекою jQuery JavaScript.


6
Це, мабуть, буде головною відповіддю ... Сором, що тут поховано
Зах Лісобей,

Де знайти файл .jshintrc у піднесеному тексті 3? Я спробував поставити цю опцію у файл налаштувань SublimeLinter.sublime (Налаштування-> Настройки пакета-> СублімLinter-> Налаштування-За замовчуванням), а також спробував створити новий .jshintrc файл (my.jshintrc) у кореневому каталозі мого проекту відповідно до jshint.com/docs . Не з цього мені допомогли.
Мілош

@Milos Встановіть JSHint Gutter в підмережевому тексті 3. Перейдіть до Інструменти> JSHint> Встановити параметри підключення, відкриється .jshintrc.
нірена

1
Нічого знову, він все ще не може розпізнати знак "$". Коли я відкриваю .jshintrc, він знаходиться на шляху: \ AppData \ Роумінг \ Піднесений текст 3 \ Пакети \ JSHint Gutter, я ставлю "jquery": true і нічого не відбувається.
Мілош

Набагато краща відповідь, ніж додавання змінних до розділу глобалів! Вирішіть це так!
Маттіас Кляйн

16

Ось щасливий маленький список, який потрібно розмістити у вашому .jshintrc,
я додаду до цього списку за часом.

{
  // other settings...
  // ENVIRONMENTS
  // "browser": true, // Is in most configs by default
  "node": true,
  // others (e.g. yui, mootools, rhino, worker, etc.)
  "globals": {
    "$":false,
    "jquery":false,
    "angular":false
    // other explicit global names to exclude
  },
}

1
Якщо встановити параметри "браузера" та "вузла" значення "істинно", єдиними необхідними елементами у цьому списку є $, jquery та angular. Для отримання додаткової інформації дивіться розділ Документи щодо Документів: jshint.com/docs/options/#environments
user456584

Я відредагував відповідь, щоб включити ваше оновлення дякую @ user456584
Джеймс Харрінгтон,

8

Якщо ви використовуєте редактор IntelliJ, такий як WebStorm, PyCharm, RubyMine або IntelliJ IDEA:

У розділі "Середовища" Файл / Налаштування / JavaScript / Інструменти якості коду / JSHint натисніть на прапорець jQuery.


1
Зверніть увагу також на те, що ви можете змінити всі внутрішні конфігурації, поставивши галочку "використовувати конфігураційний файл". Це дозволить WS побачити модифікації файлу конфігурації. Без нього він просто ігнорує.
neoswf

3

Замість того, щоб рекомендувати звичайне "вимкніть глобальні поля JSHint", я рекомендую використовувати модульну схему, щоб вирішити цю проблему. Він зберігає ваш код "вміщеним" і збільшує ефективність роботи (базуючись на "10 речей, які я дізнався про Jquery" Пола Ірліш ).

Я схильний писати свої шаблони модулів так:

(function (window) {
    // Handle dependencies
    var angular = window.angular,
        $ = window.$,
        document = window.document;

    // Your application's code
}(window))

Ви можете отримати інші переваги від продуктивності (докладніше тут )

  • Під час мінімізації коду також передається впорядкована передана в windowоб’єкті декларація. наприклад window.alert()стати m.alert().
  • Код всередині самовиконаної анонімної функції використовує лише 1 екземпляр windowоб'єкта.
  • Ви вирізаєте переслідування при виклику windowвластивості чи методу, запобігаючи дорогому проходженню ланцюга діапазону, наприклад window.alert()(швидше) порівняно alert()(повільніше).
  • Локальний обсяг функцій за допомогою "простору імен" і стримування (глобальні зли). Якщо вам потрібно розбити цей код на окремі сценарії, ви можете створити підмодуль для кожного із цих сценаріїв і імпортувати їх в один основний модуль.

2
Це шаблон, який я також використовую, але він не вирішує первісну для мене проблему. JSHint все ще скаржиться, що зміна не визначена в останньому рядку ( "}(window))"у вашому прикладі - у мене були проблеми і з jQuery та Highcharts). Я не знайшов способу відключити її, крім визначення глобальної для файлу, яка потім перемагає мету.
мірозія

@myrosia browser: trueповідомляє JSHint, що ви очікуєте середовища браузера (де windowвже визначено).
сам

Мені подобається такий підхід!
jethroo

2

Якщо ви використовуєте редактор IntelliJ, під

  • Налаштування / налаштування
    • Javascript
      • Інструменти якості коду
        • JSHint
          • Заздалегідь визначений (внизу), натисніть кнопку Встановити

Наприклад console:false, ви можете ввести що завгодно, і це додасть до списку (.jshintrc) також - як глобальний.


2

Щоб виправити цю помилку під час використання онлайн-реалізації JSHint :

  • Клацніть "CONFIGURE" (верхній частині середньої колонки на сторінці)
  • Увімкніть "jQuery" (у розділі "ЗАБЕЗПЕЧЕННЯ" внизу)

0

Ви, мабуть, хочете зробити наступне,

const $ = window.$

щоб уникнути помилки підкидання.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.