测试三中mousedown(1111, data)中1111是参数,而date是函数,不知道我这样的理解对不对

来源:2-2 jQuery鼠标事件之mousedown与mouseup事件

慕数据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之间的关系是怎样的,它们是独立的吗,如果缺少一个,另一个会正常运行吗?

写回答 关注

6回答

  • UltraNeo
    2016-12-04 18:01:24
    已采纳

    课程对这个回调函数的问题讲解得不是很清楚。

    先看click函数(mousedown函数同理),语法规则为 jQueryObject.click( [ [ data ,]  handler ] )。可以看到里面的参数是可选的(中括号的意思是可以有这个参数,也可以没有这个参数),所以我们可以看到

    1. $("button").click(handler),

    2. $("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参数传递,回调几个概念放在了一起,而且函数名还有点让人容易混淆,把这些概念拆开单独一个一个地理解就容易些。


    lx2008...

    感谢您

    2017-03-09 23:03:57

    共 3 条回复 >

  • ai柚柚酱
    2017-12-13 20:25:05

    非常感谢

  • 晒渔网
    2017-11-10 14:18:15

    看了这里,表示理解了

  • 懒惰的猫想吃鱼
    2017-06-21 10:00:43

    感谢了,这老师不严谨啊!不过很不错了!

  • qq_唯爱YOU_0
    2017-02-27 15:02:34

    终于理解了,回答很到位,不然我老是纠结两个data是什么意思了

  • 慕粉3455068
    2016-12-04 16:23:36

    1111是作为参数传过去的,这两个函数不是独立的,缺少一个都运行不了。

jQuery基础(三)—事件篇

jQuery第三阶段开启事件修炼,掌握对页面进行交互的操作

89997 学习 · 625 问题

查看课程

相似问题