您的代码中有错误:});(jQuery);
您应该调用匿名函数,而不仅仅是定义它,并使用 jQuery 作为调用它的参数,因此在匿名函数内部$
是jQuery
,因为您现在有不同的范围。
如果你(function($){/*your stuff*/});(jquery)
定义了一个匿名函数,但不要执行它。函数内部的任何内容都不会执行,并且由于匿名函数没有名称,因此您无法执行它。
删除该行中的第一个分号:
(function($) {
// do your stuff
})(jQuery);
编辑:
关于它的工作原理的一点解释:
它是一个匿名函数(如果您不知道 Javascript 中的匿名函数是如何工作的,请参阅这个问题),并且您使用jQuery
. 如果您jQuery.noConflict()
在代码中使用,因为您应该这样做以避免绑定$
到 jquery,那么您将只能使用jQuery('#myId')
jquery 函数之类的调用,而不是$('#myId')
仍然$
绑定到 Prototype 库的调用(我明确称它为 destinguish它来自prototype
对象链)。
现在考虑您的匿名函数:
你有(function($){ /* Some stuff with $ as a variable */ })
. 在函数内部,你有一个新的范围,因此$
只是你传递给函数的变量,而不是$
它的外部(仍然绑定到 Prototype 库)。
现在你将一些东西传递给匿名函数并因此执行它:(function($){ /* Some stuff with $ as a variable */ })(jQuery)
. 现在$
里面的函数是…… jQuery
,和$
外面的不一样。
编辑2:
当您更新您的问题时,我将解释使这两个库工作的步骤。您需要在 jQuery 之前包含对 Prototype 的引用,然后调用jQuery.noConflict()
. 调用之后,$()
默认使用 Prototype 库中的函数。要调用 jQuery 库中的函数,您必须使用jQuery()
(请参阅jQuery API 参考)。您将jQuery
对象的引用传递给匿名函数,因此匿名函数内部$
引用了 jQuery 对象,您无法使用 Prototype 库的功能。
现在关于回调函数的问题:问题可能出在contextMenu
函数内部,因为该函数可能无法正确使用无冲突初始化,但这只是一个疯狂的猜测。你能给出你的contextMenu
功能实现吗?