Javascript Jquery无冲突-Onclick函数-多框架

Javascript Jquery无冲突-Onclick函数-多框架,javascript,jquery,function,onclick,mootools,Javascript,Jquery,Function,Onclick,Mootools,我有多个JS框架在运行,还有一些内容只是更改文本元素的onClick=“changeText()”。我的剧本里有 jQuery(document).ready(function($){ function changeText(){ $('#test').text('Hello World!'); } }); 我相信Jquery.ready函数正在将其全部抛诸脑后。在我的调试器中,它告诉我它找不到我的changeText()函数,脚本正在100%加载该函数(

我有多个JS框架在运行,还有一些内容只是更改文本元素的
onClick=“changeText()”
。我的剧本里有

jQuery(document).ready(function($){
     function changeText(){
         $('#test').text('Hello World!');
     }
});
我相信
Jquery.ready
函数正在将其全部抛诸脑后。在我的调试器中,它告诉我它找不到我的
changeText()
函数,脚本正在100%加载该函数(我可以通过view:source->js链接查看)。另外,如果这有什么不同的话,我将运行Joomla 1.5,并将Mootools作为我的另一个框架加载

我还知道这些函数是100%正确的,因为我可以在标准html页面中正常运行它们,而无需Jquery.ready函数

有没有一种方法可以指定从哪个文件调用此文件,或者用“hacky”的方式来调用此文件?

from

jquery脚本标记将立即将jquery变量从


在jquery脚本标记将jquery变量更改为$j之后,您可以在函数中包装
jquery
。顺便说一下,
$
只是
jQuery
的别名,它是jQuery的实际名称空间。总而言之,它看起来是这样的:

(function($){
   $(function(){

       //do regular jQuery as needed

       function changeText(){                //your function
           $('#test').text('Hello World!');
       }

       $('element').on('click',function(){   //onclick handler
           changeText();
       });

   });
}(jQuery));

正如@ThiefMaster所评论的,您已经使用了
jQuery
并提供了
$
,因此您可以放弃我的包装


另外,像
这样的内联事件只会触发全局命名空间上的事件。一旦将函数包装到jQuery中,它就不再是全局命名空间的一部分。最好使用JS从包装好的代码中附加事件处理程序。

您可以在函数中包装
jQuery
。顺便说一下,
$
只是
jQuery
的别名,它是jQuery的实际名称空间。总而言之,它看起来是这样的:

(function($){
   $(function(){

       //do regular jQuery as needed

       function changeText(){                //your function
           $('#test').text('Hello World!');
       }

       $('element').on('click',function(){   //onclick handler
           changeText();
       });

   });
}(jQuery));

正如@ThiefMaster所评论的,您已经使用了
jQuery
并提供了
$
,因此您可以放弃我的包装


另外,像
这样的内联事件只会触发全局命名空间上的事件。一旦将函数包装到jQuery中,它就不再是全局命名空间的一部分。最好使用JS从包装好的代码中附加事件处理程序。

最好的选择是根本不使用内联事件-使用
$('selector')。在('click',function(){…})

如果由于某种原因不能这样做,仍然可以使用内联事件。但是,由于您是在另一个函数中定义函数,因此需要将它们设置为全局函数。您可以通过将它们添加到
窗口
对象来完成此操作,该对象是浏览器环境中的全局对象:

window.changeText = function() {
    // ...
};

最好的选择是根本不使用内联事件-使用
$('selector')。而使用('click',function(){…})

如果由于某种原因不能这样做,仍然可以使用内联事件。但是,由于您是在另一个函数中定义函数,因此需要将它们设置为全局函数。您可以通过将它们添加到
窗口
对象来完成此操作,该对象是浏览器环境中的全局对象:

window.changeText = function() {
    // ...
};

好的,但是当我调用我的函数时,它怎么知道要查看jquery呢?建议您使用事件附件而不是内联javascript来处理事件。此外,您不能使用内联事件,因为您的函数包含在像
ready()
这样的函数中。它们不再在全球范围内。我已经更新了我的答案,他已经开始包装了。DOM就绪事件已经传递了jQuery对象,因此可以使用它在函数内部将$映射到jQuery,而不需要在其周围使用另一个函数。他所需要做的就是将函数设置为全局函数(或者按照您的建议,使用javascript而不是内联事件添加事件),好吧。但是当我调用我的函数时,它如何知道如何查看jquery?建议您使用事件附件而不是内联javascript来处理事件。此外,您不能使用内联事件,因为您的函数包含在像
ready()
这样的函数中。它们不再在全球范围内。我已经更新了我的答案,他已经开始包装了。DOM就绪事件已经传递了jQuery对象,因此可以使用它在函数内部将$映射到jQuery,而不需要在其周围使用另一个函数。他所需要做的就是使函数成为全局函数(或者按照您的建议,使用javascript而不是内联事件添加事件)