Это было исправлено. Оказывается, я дважды включил jQuery в свой шаблонный документ HTML. Второй откладывается, поэтому он загружается, когда загружаются все остальные мои скрипты. Таким образом, объект jQuery в кадре 1 отличается от объектов jQuery после этого.
ользую JQuery и Backbone для создания веб-сайта, и кажется, что недавнее обновление в Chrome вызвало странное поведение. Вот мой класс представления Backbone.js:
var WebView = Backbone.View.extend({
el: '#WebView',
initialize: function() {
... // Do initialize actions
// Arm the featured works link.
this.$featuredWorks = $('a[href^="#"]').on('click',this.scrollTo);
},
scrollTo: function(e) {
e.preventDefault();
$(e.currentTarget.getAttribute('href')).ScrollTo();
},
});
Дело в том, что объект jQuery работает по-разному внутри объекта View, а не снаружи. Я импортировал расширение jQuery, которое добавляет$.fn.ScrollTo
в JQuery, но он доступен только изза пределами зрения, вот так:
console.log($.fn.ScrollTo); // Returns the function.
var WebView = Backbone.View.extend({
initialize: function() {
console.log($.fn.ScrollTo); // Returns null.
},
});
Таким образом, чтобы заставить ScrollTo работать внутри View, мне нужно сделать следующее:
var jq = jQuery;
var WebView = Backbone.View.extend({
initialize: function() {
console.log(jq.fn.ScrollTo); // This works.
},
});
Кто-нибудь знает, почему это так? Почему, кажется, есть 2 отдельных объекта jQuery? Этот скрипт загружается через AJAX и запускается с использованием$.parseHTML
, Это как-то связано с тем, почему это происходит?