2014-10-11 13 views

回答

1

你有两个不同的问题。首先,从你的HTML中取出你的JavaScript。其次,startPause()未在全局范围内定义。

<button id='clicker'>Click Me!</button> 

function startPause(){ 
    alert('A'); 
} 

$('#clicker').click(function(){ 
    startPause(); 
}); 

确保你把script标签在你body元素的结尾,然后像你在你的代码中有你不需要包装。

+0

我有一个html和js文件中的代码不是问题。那么我应该不使用“onclick”事件语法吗?优点和缺点? – 2014-10-11 21:46:16

+0

我的意思是你不应该尝试在你的html'

+0

好吧,但出于好奇,我将如何在HTML中设置“onclick”的语法?我仍然困惑于如何看待 – 2014-10-11 22:12:45

0

函数表达式定义的函数继承当前作用域。也就是说,该函数形成一个闭包。另一方面,函数构造函数定义的函数不会继承全局作用域以外的任何作用域(所有函数均继承)。 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions

这意味着,因为你不是在进行赋值为

$(function(){ 
    startPause = function(){ //var was skipped purposely 
     alert("A"); 
    }; 
}); 

如果你仍然需要在使用$(函数(){});做一个全局对象与命名空间

var stackoverflow = {}; 
$(function(){ 
    stackoverflow.startPause = function(){ //var was skipped purposely 
     alert("A"); 
    }; 
}); 


<button onclick="stackoverflow.startPause()">Start</button> 

,但最好的做法是使用

$(element).on('click', function() {}); 
1

你不需要jQuery的这一点,你应该把你的JS在bodyheadfiddle - 注意左上角的设置):

<button onclick="startPause()">Start</button> 

function startPause(){ 
    alert("A"); 
}; 

这样你的函数将在全局范围内。当您在JSFiddle中设置onLoadonDomready时,您正在将函数包装在事件回调中,并将其从全局范围中移出。

如果您需要或想要使用jQuery,请转到Jared的方式。这样你使用jQuery绑定点击事件,不要让浏览器做到这一点。这样你有更多的控制权,并可以从全球范围移动你的功能。

+0

正确的修复和准确的描述。 :) – Ashish 2014-10-11 22:05:38

相关问题