我有多个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”方式?
答案 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)
var $j = jQuery.noConflict();
在您的jquery脚本标记将jQuery变量更改为$ j后立即
答案 2 :(得分:0)
最佳选择根本不使用内联事件 - 请改用$('selector').on('click', function() { ... })
。
如果由于某种原因无法做到这一点,您仍然可以使用内联事件。但是,由于您在另一个函数中定义了函数,因此需要将它们设置为全局函数。您可以通过将它们添加到浏览器环境中的全局对象 window
对象来实现此目的:
window.changeText = function() {
// ...
};