0

已解决:删除所有对 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();
});
4

2 回答 2

1

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

(function($) {
    // Part B
})(jQuery);
于 2013-06-12T14:46:18.267 回答
0

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

正如 Joe Frambach 回答的那样:您可以将 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

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

于 2013-06-12T15:01:23.897 回答