2个脚本相互抵消

时间:2013-06-12 14:42:16

标签: jquery

已解决:删除所有对noconflict的引用修复了问题

我有2个脚本(第A部分和第B部分),它们完全可以在那里完成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 个答案:

答案 0 :(得分:1)

在另一个函数调用中包装B部分以替换$变量:

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

答案 1 :(得分:0)

jQuery.noConflict() - 调用在初始化jQuery之前将全局变量$ assignment返回到其原始定义。例如,您可能在页面上加载了另一个库/方法/属性,用于在$中存储对自身的引用。因此,部分B中使用的所有特定于jQuery的方法都需要在变量$ j而不是$。

上调用

正如Joe Frambach所回答:你可以将B部分代码包装在一个方法中,该方法将jQuery Object传递给一个定义为" $"的参数。这就是原因:

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

当使用" noConflict"时,要注意为jQuery特定上下文编写的集成(外部)脚本,因为实现可能需要一些工作。