2014-03-13 154 views
3

为什么这个简单的代码不工作?有人可以向我解释吗?为什么这个简单的onclick函数不起作用

JSFiddle

我也打电话onclick属性cc()功能。

HTML

<div> hey </div> 
<button onclick="cc()"> click me to change color</button> 

的Javascript

$(document).ready(function() { 
    function cc() { 
     $('div').css('color', 'red'); 
    }; 
}); 
+0

重复吗? http://stackoverflow.com/questions/5431351/simple-example-doesnt-work-on-jsfiddle – R3tep

+0

不容易做一个简单的$('。button')。click function? – johnny04501

+0

没有找到更简单的方法,寻找问题的根源:) – halkujabra

回答

10

cc不是全球功能。

它是用一个函数声明中定义,所以它的作用范围是它的定义。

这个函数是你传递给ready方法匿名一个功能。 (并且你在一个函数内部执行该操作,因为你的jQuery配置,你运行onload)。


全局(通常)是要尽可能避免的事情,并且内在事件属性通常取决于它们。

请勿使用内部事件属性。使用JavaScript绑定JavaScript事件处理程序。由于您使用的是jQuery,请使用on方法。

$(document).ready(function(){ 

    function cc(){ 
     $('div').css('color','red'); 
    }; 

    $('button').on('click', cc); 
}); 

demo

1

onclick属性的代码只能访问全局函数/变量。函数cc对于它定义的函数是局部的。您需要在该函数之外定义它(因此它是自动全局的),或者将其指定给window.cc以明确地使其成为全局的(我建议第二个选项)。

0

您应重视处理程序的document.ready里面的东西一样

HTML

<div> hey <div> 
    <button id="mybutton"> click me to change color</button> 

的javaScript

$(document).ready(function(){ 
    //attach the function here 
    $("#mybutton").click(
     function(){ 
      $('div').css('color','red'); 
     } 
    ); 

}); 

DEMO

0

CC是一个全球性的

我已经更新了你的工作示例

的Html

<div> hey <div> 
<button> click me to change color</button> 

的Javascript

$('button').click(function() 
{ 
    $('div').css('color','red');      
}); 

http://jsfiddle.net/zWtZ2/4/

通常我不会做不甘示弱这个,但我想给你迷你mal更改为您的代码。当你选择div上的每个按钮时。

+0

是的这是更简单的方法来做到这一点,就像他之前做的那样 – johnny04501

0

正如Quentin所说,cc不是全局函数。

但是,函数需要在被调用之前声明。因此,在小提琴中,您应该将功能包装在head中。

更新演示:http://jsfiddle.net/zWtZ2/3/

相关问题