2013-06-12 4 views
0

Solved: удаление всех ссылок на noconflict исправили проблему2 скрипты ослабляя друг друга

У меня есть 2 сценариев (часть А и часть В), которые работают отлично там самостоятельно делать 2 отдельных задач. когда я ставил их на одной странице, один отменял другую. любая помощь оценивается.

// PART A 
var $j = jQuery.noConflict(); 
jQuery(function ($j) { 

var image_slides = []; 

image_slides.push({ 
image: 'img/background.jpg' 
}) 

$j.supersized({ 

min_width: 0, 
min_height: 0, 
vertical_center: 1, 
horizontal_center: 1, 
fit_always: 0, 
fit_portrait: 1, 
fit_landscape: 0, 
slides: image_slides, 
}); 
}); 

// PART B 
function cent() { 
var $block = $("#block"), 
    margintop = parseInt($block.height()/-2); 
console.log('called'); 
$('#block').css("margin-top", margintop); 
}; 

$(document).ready(function(){ 
cent(); 
}); 
$(window).resize(function(){ 
cent(); 
}); 
+2

Это потому, что вы вызываете 'noConflict', который удаляет' $ 'как псевдоним' jQuery'. – zzzzBov

+0

в этом случае, удалив ЧАСТЬ A, чтобы разрешить работу части B: http://jsfiddle.net/njs2p/19/ – user2478466

+0

'jQuery (function ($ j) {' не имеет смысла в этом контексте. Вы уже переопределили свой jQuery объект как '$ j', поэтому вы можете просто выполнить' $ j (function() {' –

ответ

1

Wrap Часть B в другом вызове функции заменить переменную $:

(function($) { 
    // Part B 
})(jQuery); 
0

The jQuery.noConflict() - вызов возвращает глобальную переменную $ назначение в первоначальное определение, прежде чем JQuery был инициализирован. Например, у вас может быть другая библиотека/метод/свойство, загруженное на вашу страницу, где хранится ссылка на себя внутри $. Поэтому все специфичные для jQuery методы, используемые в части B, должны быть вызваны на переменную $ j вместо $.

Как ответил Джо Фрамбах: вы можете обернуть часть кода B внутри метода, который передает объект jQuery в аргумент, определенный как «$». Вот почему:

var $j = jQuery.noConflict(); // return reference of $ to original assignment 

// calls to $ here are made in the global namespace, and not invoked on jQuery 
// due to the noConflict-invocation above 

(function($) { 

    // all calls to $ inside this function body are now invoked on jQuery as 
    // jQuery is passed as an argument and we're now referencing a local namespace 

})(jQuery); 

// outside of the above function body calls to $ are made on the global namespace 
// and thus not invoked on jQuery due to noConflict-invocation 

Остерегайтесь интеграции (внешние) сценарии, которые были написаны для JQuery-специфического контекста при использовании «noConflict», так как реализация, скорее всего, потребуется некоторая работа.

Смежные вопросы