jQuery - 调用函数内联

时间:2009-08-22 12:57:01

标签: javascript jquery javascript-events inline

我试图将一个变量传递给内联的jQuery函数(即:在实际链接中使用onMouseOver="function();"(这是图像映射中的区域标记)。)

只有将函数放在$(document).ready(function(){行之前才会调用该函数,但这样做会导致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>

2 个答案:

答案 0 :(得分:9)

在第二个示例中,您已在中声明了myfunction 您传递给.ready()的匿名函数。这意味着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。)

答案 1 :(得分:1)

有两个方法,为什么代码不起作用。首先,在调用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);
  }
});