Javascript 未捕获引用错误:未为简单按钮定义startPause
我试图创建一个按钮,将警报对话框发送到窗口,但由于某种原因,我收到了以下错误:“未捕获引用错误:未定义startPause”。我做错了什么 这是我的小提琴: 代码如下:Javascript 未捕获引用错误:未为简单按钮定义startPause,javascript,jquery,Javascript,Jquery,我试图创建一个按钮,将警报对话框发送到窗口,但由于某种原因,我收到了以下错误:“未捕获引用错误:未定义startPause”。我做错了什么 这是我的小提琴: 代码如下: <button onclick="startPause()">Start</button> $(function(){ function startPause(){ alert("A"); }; }); 开始 $(函数(){ 函数startPause(){ 警报(“A”); }; });
<button onclick="startPause()">Start</button>
$(function(){
function startPause(){
alert("A");
};
});
开始
$(函数(){
函数startPause(){
警报(“A”);
};
});
您有两个不同的问题。首先,从HTML中提取javascript。其次,startPause()
未在全局范围中定义
<button id='clicker'>Click Me!</button>
function startPause(){
alert('A');
}
$('#clicker').click(function(){
startPause();
});
点击我!
函数startPause(){
警报(“A”);
}
$('#clicker')。单击(函数(){
startPause();
});
确保将
脚本
标记放在正文
元素的末尾,这样就不需要像代码中那样的包装器。由函数表达式定义的函数继承当前范围。也就是说,函数形成一个闭包
另一方面,由函数构造函数定义的函数不继承全局范围(所有函数都继承全局范围)以外的任何范围。
也就是说,因为你不是在做作业
$(function(){
startPause = function(){ //var was skipped purposely
alert("A");
};
});
如果您仍然需要在$(function(){})中使用它;创建具有命名空间的全局对象
var stackoverflow = {};
$(function(){
stackoverflow.startPause = function(){ //var was skipped purposely
alert("A");
};
});
<button onclick="stackoverflow.startPause()">Start</button>
您不需要jQuery,您应该将JS放在
body
或head
(-注意左上角的设置):
开始
函数startPause(){
警报(“A”);
};
这样,您的功能将处于全局范围。在JSFIDLE中设置onLoad
或onDomready
时,将函数包装在事件回调中,从而将其从全局范围移动
如果您需要或想要使用jQuery,请按照Jared的方式进行。通过这种方式,您可以使用jQuery绑定click事件,而不让浏览器执行此操作。这样,您就有了更多的控制权,可以从全局范围移动函数。我的html和js文件中有代码,这不是问题所在。所以我不应该使用“onclick”事件语法吗?利与弊?我的意思是你不应该尝试在你的html
中进行内联js调用。onclick没有问题,但是您需要使用要将事件绑定到的html元素的id、类或名称在js文件中设置处理程序。还有$(function(){
或其同级$(document).ready(function(){
包装器,如果您将js文件的脚本标记放在body元素的末尾而不是头部,那么就不必了。好吧,但出于好奇,我该如何设置“onclick”的语法在我的html中?我仍然不知道那会是怎样的look@Stack这是一件非常基本的事情。您在标记中定义某种元素标识(id、类),然后将回调函数附加到该标识上。
<button id='clicker'>Click Me!</button>
function startPause(){
alert('A');
}
$('#clicker').click(function(){
startPause();
});
<button onclick="startPause()">Start</button>
function startPause(){
alert("A");
};