2014-10-11 18 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

相關問題