如何避免 jquery 与原型的回调函数中的 $ 冲突
how to avoid $ conflict in the callback function of jquery with prototype
jQuery.noConflict(); or $.noConflict();
(function($) {
$(document).ready( function() {
// Show menu when #input1 is clicked
$("#input1").contextMenu({
menu: 'myMenu'
},
function(action, el, pos) {
alert("clicked");
});
})(jQuery);
在上面的代码中,我通过使用function($){}(jQuery)避免了与原型的冲突;但是在回调函数(action,e1,pos)中,它再次从原型调用函数。
$.noConflict(); & jquery.noConflict(); 我都试过但没有用。请提供建议显示我可以避免这种冲突。
冲突现在解决了。感谢大家的专家建议。但是现在另一个问题是右键单击input1时无法打开上下文菜单。请提供您的宝贵建议。
谢谢你。
问题出在 jquery.contextMenu.js 中。我已经提到了这些行:
// This plugin is dual-licensed under the GNU General Public License
// and the MIT License and is copyright A Beautiful Site, LLC.
//
if(jQuery)( function() {
$.extend($.fn,
...
})(jQuery);
所以我们不能说'$'
是jQuery或其他库。这是插件的错误。
应将function()
更改为function($)
,并解决冲突。
假设你应该使用 jQuery.noConflict()
来避免使用$
符号的库之间的干扰,最后你还有一个额外的;
(function($) {
...
}(jQuery));
您的代码中有错误:});(jQuery);
你应该调用匿名函数,而不仅仅是定义它,并使用jQuery作为调用它的参数,因此在匿名函数内部$
是jQuery
,因为你现在有一个不同的范围。
如果执行(function($){/*your stuff*/});(jquery)
则定义匿名函数,但不执行它。函数中的任何内容都不会执行,并且由于匿名函数没有名称,因此您无法执行它。
删除行中的第一个分号:
(function($) {
// do your stuff
})(jQuery);
编辑:
关于其工作原理的一些解释:
它是一个匿名函数(如果你不知道,Javascript中的匿名函数是如何工作的,请参阅这个问题),你用jQuery
调用这个函数。如果你在代码中使用jQuery.noConflict()
,为了避免将$
绑定到 jquery,那么你将只能对 jquery 函数使用 jQuery('#myId')
这样的调用,而不是$('#myId')
,因为$
仍然绑定到 Prototype 库(我明确地称之为这种方式,以从对象的prototype
链中将其命名)。
现在考虑你的匿名函数:
你有(function($){ /* Some stuff with $ as a variable */ })
.在函数内部,你有一个新的作用域,因此$
只是你传递给函数的变量,而不是它外部的$
(仍然绑定到 Prototype 库)。
现在你把一些东西传递给匿名函数,因此执行它:(function($){ /* Some stuff with $ as a variable */ })(jQuery)
。现在函数内部$
是..... jQuery
,与它之外的$
不同。
编辑2:
当您更新问题时,我将解释使两个库正常工作的步骤。你需要在jQuery之前包含对Prototype的引用,然后调用jQuery.noConflict()
。在该调用之后,$()
默认为原型库中的函数。要调用 jQuery 库中的函数,您必须使用 jQuery()
(请参阅 jQuery API 参考)。您将对 jQuery
对象的引用传递给匿名函数,因此在引用 jQuery 对象的匿名函数$
中,不能使用 Prototype 库的功能。
现在关于回调函数的问题:问题可能出在 contextMenu
函数内部,因为此函数可能无法正确使用无冲突初始化,但这只是一个疯狂的猜测。您能否提供contextMenu
函数的实现?
- 调试一个简单的jQuery函数;想知道是否与其他代码冲突
- Createjs冲突问题localToLocal不是函数错误
- 两个循环JS函数相互冲突
- 具有相同函数名称的两个 jquery 插件之间的冲突
- 未定义的主干视图不是函数冲突
- Jquery小计函数与js-gst函数冲突
- 我的if和else-if逻辑中的问题以及两个函数的冲突
- ionic框架中的app.js函数冲突
- 解决同时使用高图和树状图时的冲突(f.inArray 不是函数)
- Jquery原型与新函数冲突
- 主干和RequireJS冲突-实例或构造函数
- 单击“jQuery”中的函数冲突
- Javascript 函数冲突
- 函数与 Jquery.min.js 冲突
- Jquery $.ajax 获取响应与将“this”对象嵌套传递到“success”回调函数冲突
- Jquery 与 Venobox 冲突并从全局范围之外调用函数
- JavaScript 函数名称与 jQuery 冲突
- JavaScript 函数冲突
- Jquery 无冲突 - 点击函数 - 多个框架
- Jquery 鼠标悬停在与其他动画函数冲突的移动上