代码之家  ›  专栏  ›  技术社区  ›  panthro

将此传递给方法?

  •  0
  • panthro  · 技术社区  · 9 年前
    p.num = 100;    
    $('body').on('click', '.del', this.delete.bind(this));
    
    p.delete = function(e) {
         console.log(this.num); //100
         //how can I get the .del element?
    
    }
    

    我正在尝试获取产生点击的元素,但我还需要访问num属性。

    我如何在delete方法中访问这两种类型的“this”?

    4 回复  |  直到 9 年前
        1
  •  1
  •   Schleis    9 年前

    事件的回调接收 Event 对象,可用于检索调用事件的元素。

    function(e) {
        var element = $(e.target); //This is the element that the event was called on.
    } 
    
        2
  •  0
  •   Community Ian Goodfellow    4 年前

    免责声明:这是我从这里得到的准确答案(根据当前代码改编): Pass additional arguments to event handler?

    然而,这个问题似乎并不完全相同(但我可能错了)。


    如文件中所述 .on ,您可以向事件传递数据。

    .on(事件[,选择器][,数据],处理程序)

    数据

    类型:任意

    触发事件时要传递给event.Data中的处理程序的数据。

    因此,您的活动可能是这样的:

    p.num = 100;    
    $('body').on('click', '.del', {object : this}, this.delete);
    
    p.delete = function(e) {
      var myObj = e.data.object;
      // [myObj] will be your plugin
      // [this] will be the clicked element
      // [e] will be you event
    }
    
        3
  •  0
  •   indubitablee    9 年前

    如果您使用jquery,可以将这些函数合并为一个函数,如下所示:

    注意:num是一个属性,因此您必须使用 .attr() .

    $(document).ready(function() {
        $('body').on('click', '.del', function() {
            var num = $(this).attr('num');
            alert('click function and num = ' + num);
        });
    });
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <a href="#" num="500" class="del">Delete</a>

    或者如果你真的想让它们保持独立的功能……:

    $(document).ready(function() {
        $('.del').on('click', function() {
            deleteThis($(this));
        });
    });
    function deleteThis(element){
        var num = element.attr('num');
        alert('click function and num = ' + num);
    }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <a href="#" num="100" class="del">Delete</a>

    此外,如果您对 click 以及 delete ,从传递元素 点击 删去 :传递元素- callDeleteFunction($(this)) ,和检索元素- myDeleteFunction(element aka $(this))

        4
  •  -1
  •   andrusieczko    9 年前

    我不知道你在问什么,但也许这就是你想要的:

    var p = {};
    p.num = 100;    
    $('body').on('click', '.del', p.delete); // don't bind to this
    
    p.delete = function(e) {
         console.log(p.num); // here you still can call p
         // this is del DOM element
    
    }