2011-07-25 65 views
0

我想在用户单击网页上的某个元素时创建一些功能。一旦页面执行,回调函数就会执行。它只能在用户点击元素时执行。 这里是代码:尝试通过回调函数失败

<!DOCTYPE html> 
<html> 
    <head> 
    <title>Javascript Test</title> 
    <script src="http://code.jquery.com/jquery-latest.pack.js"></script> 
    <script> 
     $("#clickMe").one('click', printThis("Hello All")); 
     function printThis(msg) { 
     console.log(msg); 
     } 
    </script> 
    </head> 
    <body> 
    <div id="clickMe">Click me!</div> 
    </body> 
</html> 

谢谢!

+0

你的功能将离开得太早。也许它是与您的用户名。 – hugomg

回答

3

请勿调用回调。传递一个调用你想要的函数的匿名回调函数。

function printThis(msg) { 
    console.log(msg); 
} 

$("#clickMe").one('click', function() { printThis("Hello All") }); 
5

实际上没有传递功能,而是它正在评估的功能,并传递结果作为回调参数(在这种情况下,undefined)。

尝试此代替

<script> 
    function printThis(msg) { 
    console.log(msg); 
    } 
    $("#clickMe").one('click', function() { 
    printThis("Hello All"); 
    }); 
</script> 
1

一种方法采用了回调作为第二个参数。 printThis(“你好,所有”)实际上会调用它自己的方法,所以点击ClickMe时没有任何事情会发生,因为没有附加处理程序。试试这个

function printThis(msg) { 
    console.log(msg); 
} 

$("#clickMe").one('click', function() { printThis("Hello All") }); 
1

已经发布的答案是正确的:

$("#clickMe").one('click', function() { printThis("Hello All") }); 

这被称为闭包:https://developer.mozilla.org/en/JavaScript/Guide/Closures 闭包是一个函数,通常声明为代码内联/匿名块,即延迟你的函数的执行并存储你想传入的参数“Hello All”的值。

jQuery将把这个“function(){...}”代码块存储为一个事件处理函数,并且然后在#clickMe元素后面点击后,该代码块将被执行,反过来将调用printThis函数。

你会发现自己经常使用这种模式与jQuery。