以下代码运作良好。每当我点击一个项目时,它就会打开或关闭。但event
有价值的新手有一些奇怪的行为。
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>event.target demo</title>
<script src="https://code.jquery.com/jquery-1.10.2.js"></script>
</head>
<body>
<ul>
<li>item 1
<ul>
<li>sub item 1-a</li>
<li>sub item 1-b</li>
</ul>
</li>
<li>item 2
<ul>
<li>sub item 2-a</li>
<li>sub item 2-b</li>
</ul>
</li>
</ul>
<script>
function handler( event ) {
var target = $( event.target );
if ( target.is( "li" ) ) {
target.children().toggle();
}
}
$( "ul" ).click( handler ).find( "ul" ).hide();
</script>
第一次,我认为事件是一个变量,来自&#34; https://code.jquery.com/jquery-10.2.js&#34;
所以我更改了&#39;事件&#39;到&#39; xxx&#39;,并经过测试。
function handler( xxx) {
var target = $( xxx.target );
if ( target.is( "li" ) ) {
target.children().toggle();
}
}
$( "ul" ).click( handler ).find( "ul" ).hide();
但它也运作良好,没有错误。
最后,我改变了这样的代码。
function handler( xxx ) {
var target = $( xxx.target );
var target2 = $( ppp.target );
if ( target.is( "li" ) ) {
target.children().toggle();
}
}
$( "ul" ).click( handler ).find( "ul" ).hide();
但它会Uncaught ReferenceError: ppp is not defined
。
因此,我想知道event
或xxx
变量的来源和位置。
而且我也想知道javascript解释器如何翻译&#39; xxx&#39;作为具有target
属性的函数。
答案 0 :(得分:1)
handler
是一个函数,您将其作为回调函数传递给其他函数。
此handler
函数的参数为event
,xxx
或您定义它。然后handler
函数在稍后用一些参数调用。
// this function will accept another function as argument
// this callback will then be called after 1 second, that function is called
// using an object as first argument
function callInOneSecond(callback) {
setTimeout(function() {
callback({
traget: 'something'
})
}, 1000);
}
// it does not matter how the first parameter is called, it will always
// hold the first argument that is passed to it when "handler" is called.
function handler(xxx) {
console.log('was called');
console.dir(xxx);
}
callInOneSecond(handler);