慕数据2591119
2016-12-04 13:19
<h4>测试三</h4>
<div class="test3">
<p>$('.right').mousedown(1111, set)</p>
</div>
<button>不同函数传递数据</button>
<script type="text/javascript">
//不同函数传递数据
function data(e) {
alert(e.data) //1111
}
function a() {
$("button:eq(2)").mousedown(1111, data)
}
a();
</script>
1111这个参数是通过 function data(e)中的e传过去的,是吗?两个function之间的关系是怎样的,它们是独立的吗,如果缺少一个,另一个会正常运行吗?
课程对这个回调函数的问题讲解得不是很清楚。
先看click函数(mousedown函数同理),语法规则为 jQueryObject.click( [ [ data ,] handler ] )。可以看到里面的参数是可选的(中括号的意思是可以有这个参数,也可以没有这个参数),所以我们可以看到
$("button").click(handler),
$("button").click(someData, handler)
两种不同的写法。
这个课程之前的系列里面,出现的主要是以上第一种情况,例如
$("button").click(function( ) {
alert("点击后就出来这一句话");
});
这个比较好理解,通过绑定点击事件处理函数,点击后就触发该function(一个匿名函数)。
如果我们不想把代码直接写在click( )的这个括号里面,就可以另外声明一个函数,再把函数名给传递进去,替代原来function( ) {blablabla} 这一串代码的位置。这里吐槽一下老师的函数命名,起data这个名字很容易和e.data中的data搞混,实际上两个data无关,函数名随便起什么都可以。
例如我们声明一个函数
function alertSomething() {
alert("现在你可以看到我了!");
}
然后我们再把这个函数名作为参数传递到之前那个click函数中,像这样:
$("button").click( alertSomething );
就完成了和之前相同的功能,但这样就把具体实现的代码单独写成了一个函数,比较灵活。
同时,这个alertSomething函数还可以有一个参数,老师的例子起的参数名是e,这个也没什么特殊的,指代的应该是event这个单词,估计是习惯。那再看之前出现过的这个函数:
$('p').click(function(e) {
alert(e.target.textContent)
})
意思就是输出“该事件(的). 目标(的). 文本内容”。这里事件是某p标签被点击了,因此回调函数的参数e就传递了这个事件,如果页面上有大量p标签的话,用这样一个参数e就把被点击的那个p给拎了出来,e.target指的就是这个p。
最后再来说这个data部分。刚才说的click()函数的第二种写法,就是带有两个参数的,一个是someData,一个是回调函数handler,这个someData可以被当作参数传递到事件e的data属性里。这个是自动传递进去的,就像参数e指代当前点击事件,并不由用户设置,而是自动赋值一样。
function handleData(e) {
alert(e.data) //12345
}
function a() {
$("button:eq(2)").click(12345, handleData)
}
a( );
我稍微把函数名改了一下,看得更清楚一些,这个12345直接被赋值给了e的data属性,通过alert函数可以证明这一点。事实上我们可以传递更复杂的结构,例如将参数12345改成某个字典型变量,那么e.data.key就可以访问字典型变量的某个value了。
老师的这个例子有点难懂,主要原因就在于一次把可选参数,函数指针传递,data参数传递,回调几个概念放在了一起,而且函数名还有点让人容易混淆,把这些概念拆开单独一个一个地理解就容易些。
非常感谢
看了这里,表示理解了
感谢了,这老师不严谨啊!不过很不错了!
终于理解了,回答很到位,不然我老是纠结两个data是什么意思了
1111是作为参数传过去的,这两个函数不是独立的,缺少一个都运行不了。
jQuery基础(三)—事件篇
89997 学习 · 625 问题
相似问题