【问题标题】:Changing onclick handler for an element after first click首次单击后更改元素的 onclick 处理程序
【发布时间】:2014-04-13 07:27:28
【问题描述】:
   div.onclick = function(data, dom) {
        return function() {
           if (data.seenAlready == true) { // HACK
              $(this).children().toggle();
              return;
           }
           recursiveSearch(data, dom);

          // after this onclick, I want to assign it to a toggle like function. no clue how to do it.
       }
  }(child, mycontainer.appendChild(div));

我试图在第一次 onclick 一个 dom 元素后交换 onclick 方法。我只是没有任何成功,似乎是某种关闭损失,或什么的。我很好用 jQuery。

【问题讨论】:

    标签: javascript jquery closures


    【解决方案1】:

    您有两种方法可以做到这一点,这两种方法都是使用jQuery 函数:

    1) 使用one API 方法 - 这只会工作一次。您将单击它一次,然后选择您自己的第二个处理程序,第一个处理程序不会再次触发,例如

    $(myselector).one(function(){
        $(this).click(myotherhandler);
    });
    

    这是此 API http://api.jquery.com/one/ 的链接。

    2) 您可以选择以下方式替换事件处理程序。

    $(myselector).click(function(){
        $(this).off();
        $(this).click("secondhandler");
    });
    

    这将关闭第一个处理程序,只会触发第二个处理程序

    检查这个jsbin:

    http://jsbin.com/fekuq/1/edit?html,js,output

    【讨论】:

    • 好的,我想我可能知道问题所在。该事件多次触发,搞砸了我的状态。我会试试这个 jquery 之一。如果我已经引用了我的 dom 元素,我该如何使用 Jquery?
    • 您能否详细说明您的问题。您已经引用了您的 Dom 元素是什么意思。我猜你需要这个$(DomReference)
    猜你喜欢
    • 2015-12-07
    • 1970-01-01
    • 1970-01-01
    • 2012-11-18
    • 1970-01-01
    • 1970-01-01
    • 2010-09-19
    • 1970-01-01
    • 2011-06-04
    相关资源
    最近更新 更多