2009-07-31 3 views
85

Когда я использую DatePicker, UI плагин JQuery в, в существующую страницу .aspx получаю сообщения об ошибках, которые DatePicker не является функцией.":

$("#datepicker").datepicker is not a function 

Однако, когда Я копирую и вставляю тот же код, который создает и использует datePicker для HTML-файла, который также находится в том же каталоге, что и страница aspx, и работает безупречно. Это заставляет меня предположить, что на странице aspx есть некоторые файлы JS, которые предотвращают правильную загрузку файлов JQuery datePicker или jQuery.

Может ли кто-нибудь подтвердить мои убеждения или дать какие-либо советы по поиску виновника, который мешает плагинам пользовательского интерфейса jQuery?

+0

Можете ли вы разместить соответствующий код jQuery, пожалуйста, –

+0

Как вы включаете плагин datepicker на странице - это в ScriptManagerProxy или вы пишете его прямо на странице? Вы уверены, что он загружается? Если да, то какие другие плагины вы включаете? Вы уверены, что включили ui.core.js? –

+12

Я нашел проблему. Хотелось бы, чтобы я нашел это решение вчера как против 1 часа после публикации этого вопроса. Код JS, который я написал, ссылается на javascript файл jQuery и jQuery UI, который является модулем. Его родительский объект также ссылается на jQuery в нижней части тега body (так что 2 ссылки на jQuery). Поскольку jQuery повторно инициализируется после jQuery UI, пользовательский интерфейс jQuery уничтожается как плагин, поэтому почему мой код не смог найти плагин DatePicker. – burnt1ce

ответ

158

Я боролся с подобной проблемой часами. Затем выяснилось, что jQuery был включен дважды, один раз программой, что я добавлял функцию jQuery и один раз нашим внутренним отладчиком.

+3

Это была моя проблема. У меня была ссылка на мою собственную библиотеку jQuery вместе с jQuery Tools CDN, которая, бессознательно, включала jQuery. – DavGarcia

+0

Это тоже моя проблема. Я использую суперфиш, и он также загружает jquery. Я этого не замечал до сих пор. – rrtx2000

+20

Итак, какое решение? –

23

Если есть другая библиотека, которая использует переменный $, вы можете сделать это:

var $j = jQuery.noConflict(); 
$j("#datepicker").datepicker(); 

Также убедитесь, что Javascript включает в правильном порядке, чтобы библиотека ядра JQuery определяются перед JQuery. щ. У меня были проблемы.

+0

Также убедитесь, что ваш javascript включен в правильном порядке, поэтому основная библиотека jquery определена до jquery.ui. У меня были причины, вызывающие проблемы << это правильный ответ для меня. – macaesar

+1

Это не помогло мне еще –

8

Если вы считаете, что есть конфликт, вы можете использовать jQuery.noConflict() в своем коде. Подробности указаны в docs.

REFERENCING MAGIC - SHORTCUTS ДЛЯ Jquery

Если вам не нравится набирать полный "JQuery" все время, есть некоторые альтернативные ярлыки:

Переприсвоить Jquery к другому ярлык var $j = jQuery; (Это может быть наилучший подход , если вы хотите использовать разных библиотеках) Используйте следующую технику , которая позволяет использовать $ внутри блока кода без постоянно переписывая $:

(function($) { /* some code that uses $ */ })(jQuery) 

Примечание: Если вы используете эту технику, вы не сможете использовать методы Prototype внутри этой капсулах функцию, ожидать $ to be Prototype's $, поэтому вы делаете выбор , чтобы использовать только jQuery в этом блоке . Используйте аргумент в DOM готового события:

jQuery(function($) { /*some code that uses $ */ }); 

Примечание: Опять же, внутри этого блока вы не можете использовать методы Prototype

Вот с конца Документов и может быть вам полезна

3

Пробовал ли вы использовать Firebug для того, чтобы 1) определить, что нет ошибок Javascript, и 2) что #datepic Элемент ker существует на странице?

Скорее всего до вызова datepicker, который препятствует выполнению вызова datepicker.

17

Эта ошибка обычно появляется, когда вам не хватает файла из набора пользовательских интерфейсов jQuery.

Дважды проверьте, что у вас есть все файлы, файлы пользовательского интерфейса jQuery, а также CSS и изображения и что они находятся в правильно связанном каталоге/каталоге на вашем сервере.

+0

Этот ответ ближе всего к решению, которое я опубликовал. – burnt1ce

+0

Вы также можете оставить свой комментарий как свой собственный ответ и принять его спустя некоторое время. – random

+0

Примечание для себя: убедитесь, что при переключении с локальных файлов на CDN-файлы Google, у вас есть правильный URL-адрес. Это ajax.googleapis.com/ajax/libs/jqueryui/1.10.2/jquery-ui.min.js, а не ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery-ui.min.js, Данг это. – neminem

5

Ищите очевидное первое: хорошо ли вы ссылаетесь на файл jquery-ui.js?

Попробуйте использовать вкладку сети firebug, чтобы узнать, загружена ли она, или код javascript Information \ View панели инструментов веб-разработчиков.

1

У меня была эта проблема и перемещение ссылок и кода JS в нижней части страницы, прежде чем тег </body> исправил это для меня.

1

Также проверьте разрешения для каталога, в который вы загружаете файлы. По какой-то причине, когда я скачал это, по умолчанию он был сохранен в папке без доступа! Наверняка навсегда выяснилось, что это была проблема, но мне просто нужно было изменить разрешение для каталога и его содержимого - настроить его так КАЖДЫЙ = ЧИТАТЬ ТОЛЬКО. Прекрасно работает.

0

Недавно я столкнулся с этой проблемой - проблема заключалась в том, что я включил файлы пользовательского интерфейса jQuery в тег заголовка, но в библиотеке Telerik, которую я использовал, был включен jQuery в нижней части тега body (таким образом, по-видимому, повторно инициализировался jQuery и выгрузка ранее загруженных модулей пользовательского интерфейса).

Решение заключалось в том, чтобы выяснить, где именно был включен jQuery, включая скрипты jQuery UI после этого.

0

Я просто столкнулся с подобной проблемой. Когда я сменил ссылку на сценарий с самозакрывающихся тегов (т. Е. <script src=".." />) на пустые узлы (т.е. <script src=".."></script>), мои ошибки ушли, и я мог внезапно ссылаться на функции пользовательского интерфейса jQuery.

В то время я не понимал, что это был просто мозговой удар, который я не закрывал должным образом для начала. (Я публикую это просто на случай, если кто-либо другой, сталкивающийся с проблемой, имеет аналогичную проблему.)

0

Некоторые файлы не загружаются, прежде чем звонить.

Например: Ваш код:

<%= javascript_include_tag "distpicker.min" %> 
<%= javascript_include_tag "distpicker.data.min" %> 

Изменить это:

<%= javascript_include_tag "distpicker.data.min" %> 
<%= javascript_include_tag "distpicker.min" %> 
2

Я знаю, что этот пост довольно старый, но для справки я исправил эту проблему путем обновления версии of datepicker

Стоит попробовать, чтобы избежать часовых отладок.

https://cdnjs.com/libraries/bootstrap-datepicker

2

JQuery «$ (» # DatePicker «).datepicker не является функцией »

Я исправил проблему, разместив нижеуказанные три файла в разделе тела формы в конце.

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.6/jquery.min.js" type="text/javascript"></script> 
    <script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/jquery-ui.min.js" type="text/javascript"></script> 
    <link href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/themes/base/jquery-ui.css" rel="Stylesheet" type="text/css" /> 
0

я мог бы решить эту проблему, извлекая сверток Jquery на _Layout.cshtml

Заголовок

<script src="~/Scripts/jquery-1.10.2.js"></script> 
    <script src="~/Scripts/kendo/2015.2.902/kendo.all.min.js"></script> 
    ... 

Footer

@Scripts.Render("~/bundles/jquery") 
    @Scripts.Render("~/bundles/bootstrap") 
    @RenderSection("scripts", required: false) 

Изменить колонтитулы

@Scripts.Render("~/bundles/bootstrap") 
    @RenderSection("scripts", required: false)