2012-01-18 193 views
0

另一个倒霉的菜鸟... 好吧,所以我到处寻找尝试并找出如何使这个jQuery/JavaScript函数,我希望这只是我的语法错误,但这里是我的代码: onclick="loadNext(YorN);"函数未定义 - jQuery/Javascript

<script type="text/javascript"> 

$(function() 
{ 
     function loadNext(choice) { 
      $("#thequestion").load("question.php", { ans: choice, id: "<?php echo $row['id']; ?>", nextId: "<?php echo $nextQuestionId; ?>" }); 

      $("#graph").load("graph.php", { id:"<?php echo $row['id']; ?>", nextId: "<?php echo $nextQuestionId; ?>" }); 
      alert("loadNext activated"); 
     } 

}); 
</script> 

然后我用onclick事件像这样调用loadNext(choice)功能。

在此之后,我得到'loadNext未定义'错误。

我会接受的答案包括:“你没有学习!”和“你很傻”。

Here is a similar problem.

感谢。

回答

4

您刚刚定义的loadNext函数对于您的匿名函数的作用域是本地的。如果你想全局访问它,那么在全局(在你的onready处理程序之外)定义它。

1

,因为你有一个函数的功能里面

(function() 
{ 
     function loadNext(choice) { 
      this is bad 
     } 

function loadNext(choice) { 
      this is good 
     } 

onclick="loadNext()" 

没有probs

1

你为什么不只是把你的loadNext功能之外$(函数(){})的?

2

外“$(函数()。”你有你的第一线限制了你的范围 - 在loadNext功能仅此块中可用,并且将它的外面是未定义

最简单的方式。解决这个问题是只定义了$(函数()..)块之外的“loadnext”的功能,但是这是错误的,原因有二:

  1. 这使得整个应用程序的功能,全球性的,污染全局命名空间是一个不可以,
  2. 内嵌JavaScript像“onclick”一般是不好的 - 这使模糊线在演示和逻辑之间,并使调试变得痛苦。

为了解决这个问题,使用jquery绑定事件来附加事件处理程序;即,

$( “#myfancybutton”,点击(函数(){loadNext(选择)});你的$(函数()..)集团

+0

感谢您的提示!我很感激。 – user1104147 2012-01-18 02:54:21

1

因为loadNext是不是在全球范围内的你。可以在全球范围内定义它,甚至更好的解决方案是使用.click()来绑定您的点击事件。