Jquery No Conflict - Onclick函数 - 多个框架

时间:2012-04-21 10:19:14

标签: javascript jquery function onclick mootools

我有多个JS框架正在运行,而一些onClick="changeText()"内容只是更改了元素文本。在我的剧本中我有

jQuery(document).ready(function($){
     function changeText(){
         $('#test').text('Hello World!');
     }
});

我相信Jquery.ready功能正在全力以赴。在我的调试器中,它告诉我它找不到我的changeText()函数,脚本100%加载(我可以通过视图查看:source - > js链接)。此外,如果它有所作为,我正在运行Joomla 1.5,并将Mootools作为我的其他框架加载。

我也知道函数是100%正确的,因为我可以在没有Jquery.ready函数的标准html页面中正常运行它们。

有没有办法指定要调用此文件的文件或“hacky”方式?

3 个答案:

答案 0 :(得分:3)

你可以在函数中包装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并提供了$,因此您可以放弃我的包装。

并且要添加,像<button onclick="doSomething()">这样的内联事件只会触发全局命名空间中的事件。一旦你将函数包装在jQuery中,它就不再是全局命名空间的一部分了。最好是在包装代码中使用JS来附加事件处理程序。

答案 1 :(得分:1)

来自the documentation

var $j = jQuery.noConflict();
在您的jquery脚本标记将jQuery变量更改为$ j后立即

答案 2 :(得分:0)

最佳选择根本不使用内联事件 - 请改用$('selector').on('click', function() { ... })

如果由于某种原因无法做到这一点,您仍然可以使用内联事件。但是,由于您在另一个函数中定义了函数,因此需要将它们设置为全局函数。您可以通过将它们添加到浏览器环境中的全局对象 window对象来实现此目的:

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