Javascript Jquery无冲突-Onclick函数-多框架
我有多个JS框架在运行,还有一些内容只是更改文本元素的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%加载该函数(
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而不是内联事件添加事件)