您的代码中有错误:});(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功能实现吗?