Javascript 修订';文本';按类名对元素进行排序

Javascript 修订';文本';按类名对元素进行排序,javascript,jquery,html,Javascript,Jquery,Html,我被困在一些我认为应该非常简单的事情上(这就是我所知道的!) 在HTML中,我得到: <a class="removeQuantity"> - </a> <span class="quantity"> 1 </span> <a onclick="addQuantity('2')"> + </a> 所以我要做的是将包含数量类的值从1改为传递给函数(2)的值,但似乎没有任何效果 有人能给我指一下正确的方向吗 谢谢, C问题在

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

在HTML中,我得到:

<a class="removeQuantity"> - </a> 
<span class="quantity"> 1 </span>
<a onclick="addQuantity('2')"> + </a>
所以我要做的是将包含数量类的值从1改为传递给函数(2)的值,但似乎没有任何效果

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

谢谢,
C

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

<a onclick="addQuantity(2, this)"> + </a>
请注意,在上面的示例中,我直接向函数传递了一个整数,以避免强制转换其类型

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

<a class="quantity-amend" data-quantity="2"> + </a>
我不能使用不引人注目的(我想!),因为当数量变化被确认时,我所在页面的部分会被重新加载

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

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

您的代码中缺少
e
,我更正了,您恢复了。我更喜欢
上的
,而不是
。单击
,因为前者可以使用更少的内存,并且可以用于动态添加的元素。@SusheelSingh谢谢。还要注意,您编辑的
on()
的方法签名对于动态元素根本不起作用;为此,您需要使用
$('parent')。在('event','child',fn)
@驴子,你说得对!今天早上需要更多的咖啡:)
$(这个)。数据(“数量”)
顺便说一句@donkeySharp-eye@SusheelSingh!
$(document).on('click', '.quantity-amend', function(e) {
    e.preventDefault();
    $(this).prevAll('.quantity').text($(this).data('quantity'));
});