javascript - 缺少上下文 JavaScript

标签 javascript jquery jquery-events

我有一个方法_addEvents,它使用JQuery on. 函数设置按钮的单击事件。这也给出了 cartCollection.removeItem(buttonId); 的单击按钮的 id 问题是它不断丢失按钮的 id 值并给出 undefined

已编辑
_addEvents 必须从此模板获取单击按钮的 ID:

<script type="text/template" id="cartTemplate">
<ul id = "cartList" >
    <% for(var i = 0; i < data.items.length; i++){%>
    <%if(data.items[i].quantity === 1){%>
    <li><%=data.items[i].item.id%><br>
        <%=data.items[i].item.name%><br>
        Price per Phone:<%=data.items[i].item.price%><br>
        <%=data.items[i].thisItemTotal %><br>
        Total Quantity:<%=data.TotalQuantity%><br>
        Total Price:<%=data.total%><br>
        <button id="<%=data.items[i].item.id%>" type="button" class="removeButton btn btn-default" aria-label="center-align">
            Remove
        </button>
    </li>
    <%} else {%>
    <li><%=data.items[i].item.id%><br>
        <%=data.items[i].item.name%><br>
        Quantity:<%=data.items[i].quantity%><br>
        Price per Phone:<%=data.items[i].item.price%><br>
        <%=data.items[i].thisItemTotal %><br>
        Total Quantity:<%=data.TotalQuantity%><br>
        Total Price:<%=data.total%><br>
        <button id="<%=data.items[i].item.id%>" type="button" class="removeButton btn btn-default" aria-label="center-align">
            Remove
        </button>
    </li>
    <%}%>
    <%}%>
</ul>
</script>

_addEvents的实现以及该方法所属的对象:

var cartList = {
    _itemsCollections: cartCollection,
    _template: _.template($('#cartTemplate').html()),
    _rootElement: $('#ordersCartDiv'),
    //_rootElementUl: $("#cartList"),
    initialize: function () {
        'use strict';
        //this.divId = divId;
        //this._rootElementUl = $("#cartList");
        //this._itemsCollections= cartCollection;
        //bind(this._addEvents(),cartList);
        this._addEvents();
    },
    render: function () {
        'use strict';
        var data = {
            items: this._itemsCollections.getItems(),
            total: this._itemsCollections.getTotalPrice(),
            TotalQuantity: this._itemsCollections.getTotalQuantity()
        };
        var rendTemplate = this._template({data: data});
        this._rootElement.html(rendTemplate);
        this._addEvents();
        console.log(this._itemsCollections);
    },
    _addEvents: function () {
        'use strict';
        var self = this;
        this._rootElement.on('click','.removeButton' , function () {
            var buttonId = $(self).attr('id'); // undefined
            console.log('id:' + buttonId);
            cartCollection.removeItem(buttonId);
            cartList.render();
        });
    }
};

 

最佳答案

好的 - 您的 this 引用回调上下文,您应该从事件对象中获取单击的对象:

_addEvents: function () {
    'use strict';
    this._rootElement.on('click','.removeButton' , function ( e ) {
        var buttonId = $( e.currentTarget ).attr('id'); // GET TARGET FROM EVENT
        console.log('id:' + buttonId);
        cartCollection.removeItem(buttonId);
        cartList.render();
    });
}

关于javascript - 缺少上下文 JavaScript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30642284/

相关文章:

javascript - 使用 ng-repeat 动态创建对象 - 想要默认选中复选框

javascript - 避免使用 MVC 和 Jquery 进行 db 调用来重置值

javascript - 检测是否在 jQuery 中手动触发滚动事件

javascript - 触发在不同代码块中分配的 jQuery 事件处理程序

javascript - Knockout.js 似乎在破坏我的 jQuery 事件处理程序,多么粗鲁

javascript - knockout - 通知属性(property)变更

javascript - 主干验证问题

jquery - flot 根据时间戳显示 flot 中的日期

javascript - jQuery 的 click() 函数怎么会比 addEventListener() 快这么多?

javascript - 电子邮件地址是否需要 @ 符号才能被视为符合 RFC?