#jquery
#jquery
Вопрос:
Когда я пытаюсь использовать $("#div_id")
in $(document).ready
, он возвращает NULL, но когда я использую jQuery("#div_id")
, он возвращает фактический объект!
Почему это происходит?
ОБНОВЛЕНИЕ: я попробовал метод noConflict, не получив никаких подсказок.
jQuery.noConflict()
function (a,b){return new c.fn.init(a,b)}
$.noConflict();
TypeError: Object function ()
{
return document.getElementById.apply(document, arguments)
} has no method 'noConflict'
ОБНОВЛЕНИЕ 2:
$(document).ready(function() {
debugger;
});
<input type="text" id="test" name="test" value="123" />
Когда я запускаю следующий код в консоли, я получаю эти результаты:
$("#test").val()
TypeError: Cannot call method 'val' of null
jQuery("#test").val()
"123"
Спасибо
Комментарии:
1. Похоже, firebug переопределяется
$
на document.getElementById2. Я загружаю страницу, не включая firebug, иногда она выдает сообщение об ошибке, указывающее, что элемент не найден. Но в других случаях это работает нормально
Ответ №1:
Смотрите jQuery.noConflict(). Могут ли другие библиотеки javascript на вашей странице использовать $
переменную?
$
это просто переменная, которая используется для псевдонима jQuery
и, будучи переменной, ей может быть присвоено что угодно.
Комментарии:
1. Когда именно ему присваивается псевдоним? Я попытался
jQuery("#checkbox1")
и#("#checkbox1")
на новой html-странице без каких-либо плагинов, первый сработал как по волшебству, другой вернул NULL. Я использовал jQuery 1.5.2 для этого теста2. @wael34218 хм … любопытно, мне нужно было бы увидеть несколько примеров кода, прежде чем я мог бы рискнуть предположить, что происходит. Можете ли вы опубликовать простую страницу, которая воспроизводит эту ошибку?
3. Я снова обновил сообщение, пожалуйста, ознакомьтесь с ним. Если я помещаю оповещения для отображения значения $ («#test») / jQuery («#test») вместо debugger, иногда это работает, иногда нет
4. Я сказал то же самое, но мой интервьюер, похоже, с этим не согласился. : (
Ответ №2:
$
и jQuery
оба они одинаковы, за исключением того, что $
это просто псевдоним, jQuery
который вы можете изменить или удалить с помощью jQuery.noConflict
mode.
Комментарии:
1. Когда именно ему присваивается псевдоним? Я попытался использовать jQuery («#checkbox1») и # («#checkbox1») на новой html-странице без каких-либо плагинов, первый сработал как по волшебству, другой вернул NULL. Я использовал jQuery 1.5.2 для этого теста
2. Попробуйте
$("#checkbox1")
вместо#("#checkbox1")
3. lol это была ошибка опечатки в моем комментарии, она есть
$("#checkbox1")
в моем коде
Ответ №3:
$ также используется в Prototype.js, который представляет собой фреймворк javascript, подобный jQuery. Может быть так, что ваш проект также включает ссылки на этот фреймворк.
Для получения дополнительной информации о том, как работает прототип dollar, перейдите сюда.
Вы можете заставить их работать вместе с оператором noConflict, как указано в других ответах. Мы делаем это в одном из наших проектов, который использует $ (элемент) для устаревшего кода прототипа и jQuery (элемент) для нового кода jQuery.
Комментарии:
1. Я вообще не использую prototype и не планирую этого делать. Идея в том, что я использую только jQuery и jQuery != $ … это меня смущает
2. Возможно, вы работали над устаревшим приложением с более старыми ссылками на другие фреймворки js. Если это не так, игнорируйте этот ответ =)
3. Я работал над очень старым кодом, который разрабатывался древними греками, когда я обнаружил это. Но когда я попробовал это на новом HTML-файле, который включает только jquery 1.5.2, возникла та же проблема.
4. Может ли это быть включено в одну из ваших мастер-страниц?
5. Нет, я так не думаю, я написал простую тестовую страницу html, и возникло то же поведение.
Ответ №4:
Похоже, что что-то заняло $, чтобы переназначить jQuery на $, попробуйте перейти:
var $ = jQuery;
Ответ №5:
Может быть, у вас есть другая библиотека, которая использует $?
Комментарии:
1. Если вы взглянете на документацию noConflict по jQuery, api.jquery.com/jQuery.noConflict
2. Я не использую какую-либо библиотеку, которая могла бы ее переопределить
Ответ №6:
jQuery
и $
одинаковы — смотрите исходный код jQuery:
window.jQuery = window.$ = jQuery;
Возможно, вы используете другую библиотеку, которая использует переменную $, и тогда вам нужно решить конфликт именования.
<script type="text/javascript">
jQuery.noConflict();
jQuery(document).ready(function($) {
// Code that uses jQuery's $ can follow here.
});
// Code that uses other library's $ can follow here.
</script>
Или вы можете использовать один из следующих фрагментов (в его теле не будет конфликта $):
// Method 1
jQuery(document).ready(function($){
/* some code that uses jQuery $ */
});
// Method 2
(function($) {
/* some code that uses jQuery $ */
})(jQuery);
Комментарии:
1. Я использую только jQuery без каких-либо других библиотек. Попробуйте, создайте простую HTML-страницу, требующую jQuery, и вы увидите разницу между $ и jQuery.