1

我有多个 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% 正确的,因为我可以在没有 Jquery.ready 函数的标准 html 页面中正常运行它们。

有没有办法指定从哪个文件调用它或围绕这个“hacky”方式?

4

3 回答 3

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 附加事件处理程序。

于 2012-04-21T10:27:22.970 回答
1

文档中,

var $j = jQuery.noConflict();

在您的 jquery 脚本标记之后立即将 jQuery 变量更改为 $j

于 2012-04-21T10:22:57.667 回答
0

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

If you cannot do that for some reason, you can still use inline events. However, since you are defining your functions inside another function, you need to make them global. You do so by adding them to the window object which is the global object in a browser environment:

window.changeText = function() {
    // ...
};
于 2012-04-21T10:45:35.583 回答