修正案'text'的元素

Amend 'text' of element by class name

本文关键字:元素 text 修正案      更新时间:2023-09-26

我一直在做一些我认为应该非常简单的事情(这就是我所知道的!)。

在HTML中我有:

<a class="removeQuantity"> - </a> 
<span class="quantity"> 1 </span>
<a onclick="addQuantity('2')"> + </a>

在我的脚本中,我有一个函数:

function addQuantity(iQuant) {
    iQuant = parseInt(iQuant);
    $(this).prevAll('.quantity').text(iQuant.toString());
}

所以我想做的是将包含的值从1更改为传递给函数(2)的值,但似乎什么都不起作用。

有人能给我指正确的方向吗?

谢谢,C

问题是,当使用on*属性分配事件处理程序时,它不会将范围设置为当前元素,因此this指的是窗口,而不是引发事件的元素。要解决此问题,您可以将元素引用直接传递给函数,如下所示:

<a onclick="addQuantity(2, this)"> + </a>
function addQuantity(iQuant, el) {
    $(el).prevAll('.quantity').text(iQuant);
}

请注意,在上面的示例中,我直接向函数传递了一个整数,以避免强制转换其类型。

作为更好的选择,您可以使用不引人注目的JS附加事件处理程序。如果你用jQuery标记了这个问题,下面是如何做到的:

<a class="quantity-amend" data-quantity="2"> + </a>
$('.quantity-amend').click(function(e) {
    e.preventDefault();
    $(this).prevAll('.quantity').text($(this).data('quantity'));
});

我不能使用不引人注目的(我想!),因为当确认数量变化时,我所在页面的部分会被重新加载。

在这种情况下,您可以使用委托的事件处理程序:

$(document).on('click', '.quantity-amend', function(e) {
    e.preventDefault();
    $(this).prevAll('.quantity').text($(this).data('quantity'));
});