繁体   English   中英

如何避免原型的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.noConflict()来避免使用$符号的库之间的干扰,那么您还需要额外的; 在末尾

(function($) { 
    ...
}(jQuery)); 

您的代码中有错误: });(jQuery);

您应该调用匿名函数,而不仅仅是定义它,并使用jQuery作为调用它的参数,因此匿名函数$jQuery ,因为您现在拥有不同的作用域。

如果执行(function($){/*your stuff*/});(jquery) ,则定义了一个匿名函数,但不执行它。 该函数内部的任何内容都不会执行,并且由于匿名函数没有名称,因此您无法执行它。

删除该行中的第一个分号:

(function($) { 
    // do your stuff
})(jQuery);

编辑:

对此有一些解释:

它是一个匿名函数(如果您不知道Java匿名函数是如何工作的,请参阅此问题 ),然后使用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.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($)并应解决冲突。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM