[英]jQuery - Calling a function inline
我试图将一个变量传递给内联的jQuery函数(即:在实际链接中使用onMouseOver="function();"
(这是图像映射中的区域标记))。
只有在我将它放在$(document).ready(function(){
line之前,才会调用该函数,但这样做会导致jQuery出现各种问题。
我想要的只是一个简单的标签(例如<area shape="circle" coords="357,138,17" onMouseOver="change('5');" id="5" />
来启动一个包含的函数在正常的jQuery代码体内。
非常感谢您提供的任何帮助。
为了说明这一点,以下工作:
<script type="text/javascript">
function myfunction(x) { alert(x); //Alerts 2
}
</script>
<img src="/shared_images/loading.gif" border="0" usemap="#Map">
<map name="Map"><area shape="rect" coords="171,115,516,227"
onMouseOver="myfunction('2')"></map>
但以下情况并非如此
<script type="text/javascript" src="scripts/jquery.js"></script>
<script type="text/javascript">
$(document).ready(function(){
function myfunction(x) { alert(x); //Nothing happens
}
}
</script>
<img src="/shared_images/loading.gif" border="0" usemap="#Map">
<map name="Map"><area shape="rect" coords="171,115,516,227"
onMouseOver="myfunction('2')"></map>
在你的第二个例子中,你已经在你传递给.ready()
的匿名函数中声明了myfunction
。 这意味着myfunction
是一个局部变量,它只在匿名函数的范围内,你不能从其他任何地方调用它。
有两种解决方案。
首先,您可以在调用.ready()
之外(之前或之后)声明它。 这不应该对jQuery造成任何干扰。 如果确实如此,那么其他错误(可能是一个简单的语法错误?)我们欢迎您提出StackOverflow问题。
其次,你不应该使用onMouseOver=""
来附加事件处理程序(因为它将JavaScript与HTML混合在一起),所以让我们完全废除它。 用以下内容替换您的JavaScript:
$(document).ready(function() {
$("#that-area-down-there").mouseover(function() {
alert(2);
});
});
你的HTML用这个:
<area shape="rect" coords="171,115,516,227" id="that-area-down-there" />
(当然,您可能希望用上下文中更有意义的内容替换该id
。)
代码不起作用的原因有两个。 首先,在调用ready函数时缺少右括号,因此会出现语法错误。
其次,您在函数内定义的函数仅存在于该范围内。 退出该功能时,它不再存在。
例:
$(document).ready(function(){
function myfunction(x) {
alert(x);
}
myfunction(42); // here it works
}
myfunction(-1); // here it doesn't exist
您可以在函数内全局定义函数,如下所示:
$(document).ready(function(){
myfunction = function(x) {
alert(x);
}
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.