2013-08-05 33 views
1

我试图发送一个变量通过一个函数,当点击图像,但不能得到它的任何工作。不知道我哪里去错了。?通过javascript发送变量到一个函数

的jsfiddle http://jsfiddle.net/cibravo/rNGMR/

HTML

<input type="submit" value="send" onclick="alert('works')" /> 
<br/><br/> 

<img onclick="alert('works')" src="http://firmakurser.studieskolen.dk/images/web/Facebook-logo-small.png" /> 

<br/><br/> 
<!-- this doesn't work --> 
<input type="button" value="send" onclick="myFunction()" /> 
<br/><br/> 
<!-- this doesn't work --> 
<img onclick="showhide('works')" src="http://firmakurser.studieskolen.dk/images/web/Facebook-logo-small.png" /> 

JS 

function myFunction(){ 
    alert("works"); 
} 

function showhide(field){ 
    alert(field); 
} 
+0

请阅读的jsfiddle的文档:http://doc.jsfiddle.net/basic/introduction.html#fiddle-settings-sidebar和学习[如何**调试** JavaScript](http://www.netmagazine.com/tutorials/javascript-debugging-beginners)。 –

+0

[jsfiddle.net上的JavaScript]的可能的重复(http://stackoverflow.com/questions/5456361/javascript-on-jsfiddle-net) – JJJ

回答

1

你的例子,你说的不工作会工作,他们称之为提供功能两者都是全局,不包含任何作用域函数中。

它不是在你的提琴工作的原因是的jsfiddle的(奇怪),默认是来包装你的JavaScript代码在windowload事件处理程序,如下所示:

window.onload = function() { 
    // your code here 
}; 

...所以你的函数不是活得全球。 (我说,因为等到windowload事件而运行,这是在页面加载过程非常晚这是令人惊讶的,是不是最好的做法。)

这里有一个更新的小提琴:http://jsfiddle.net/rNGMR/4/作为Juhana所指出的,你改变电热器第二次下降在左上角的一个“无包裹”选项(我去“无包裹身体”)。

为了清楚起见,以下是一个完整的一体化示例:Live Copy | Live Source

<!DOCTYPE html> 
<html> 
<head> 
<meta charset=utf-8 /> 
<title>Global Functions</title> 
</head> 
<body> 
<input type="submit" value="send" onclick="alert('works')" /> 
<br/><br/> 

<img onclick="alert('works')" src="http://firmakurser.studieskolen.dk/images/web/Facebook-logo-small.png" /> 

<br/><br/> 
<!-- this doesn't work --> 
<input type="button" value="send" onclick="myFunction()" /> 
<br/><br/> 
<!-- this doesn't work --> 
<img onclick="showhide('works')" src="http://firmakurser.studieskolen.dk/images/web/Facebook-logo-small.png" /> 
<script> 
// Note that these are globals 
function myFunction(){ 
    alert("works"); 
} 

function showhide(field){ 
    alert(field); 
} 
</script> 
</body> 
</html> 
+2

换句话说,从第二个下拉列表中选择“no wrap”选项菜单在左上角。 http://jsfiddle.net/rNGMR/1/ – JJJ

1

更多或更少的alternity您目前的做法 (虽然我写了这其中得到了解决。)

请尝试当你在更大的项目工作,避免使用“的onclick”事件。将HTML,CSS和JavaScript模块化分开通常会更好。


当我遇到这样的问题,我通常使用匿名函数,谁再调用 功能与正确的参数。

这种技术也解决了所有问题都需要全球化的问题 - 这也不鼓励。

它适合我很好的过去3年和约15k行的JavaScript代码。

下面是一个例子: http://jsfiddle.net/8jSaT/1/

<!-- HTML --> 
<img id="btnSomething" src="http://firmakurser.studieskolen.dk/..."> 

// (plain) Javascript 
var btn = document.getElementById('btnSomething'); 

// this is where the anonymous function comes in: 
// Its only purpose is to redirect the onClick-Event 
// and serve proper parameters 
var btn.onclick = function() { showhide('works'); }; 

// Your code 
//////////////// 
function myFunction(){ 
    alert("works"); 
} 

function showhide(field){ 
    alert(field); 
}