6

我正在尝试将一个变量传递给内联的 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>
4

2 回答 2

10

在您的第二个示例中,您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用在上下文中更有意义的东西来替换它。)

于 2009-08-22T13:02:04.823 回答
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);
  }
});
于 2009-08-22T13:15:07.290 回答