C# 如何通过jQuery/javascript在ASP.NET转发器中选择特定的html元素?

C# 如何通过jQuery/javascript在ASP.NET转发器中选择特定的html元素?,c#,javascript,jquery,asp.net,html,C#,Javascript,Jquery,Asp.net,Html,我有一个ASP.NET Repeater控件,其中在每个ItemTemplate中生成/创建以下代码实例 我试图在jQuery/javascript中创建一个函数,每次单击向上箭头时,“qualityBox”文本框中的值都会递增。对于我的代码,这只适用于第一个“ItemTemplate”实例,即我的中继器中的第一行 有谁能指导我在中继器中的每一行都能做到这一点?换句话说,一行中按下的按钮使相应行中的“quantityBox”仅增加1 谢谢 我会在qty框上创建一个具有某种ID的数据属性,然后将该

我有一个ASP.NET Repeater控件,其中在每个ItemTemplate中生成/创建以下代码实例

我试图在jQuery/javascript中创建一个函数,每次单击向上箭头时,“qualityBox”文本框中的值都会递增。对于我的代码,这只适用于第一个“ItemTemplate”实例,即我的中继器中的第一行

有谁能指导我在中继器中的每一行都能做到这一点?换句话说,一行中按下的按钮使相应行中的“quantityBox”仅增加1


谢谢

我会在qty框上创建一个具有某种ID的数据属性,然后将该ID附加到具有向上箭头的元素,这样就可以在两者之间建立关系

<ItemTemplate>
    <input type="text" id="quantityBox" data-elementID="$$" value="0"/>
    <input type="button" data-elementID="$$" id="upButton"/>
</ItemTemplate>

您的代码的问题在于,您的使用ID。ID应该是唯一的。因此,当jQuery找到第一个时,它使用的就是第一个。你需要一些可以重复的东西,比如类

<ItemTemplate>
    <div>
        <input type="text" id="quantityBox" value="0"/>
        <input type="button" class="upButton"/>
    </div>
</ItemTemplate>
要做的第一件事是将选择器更改为add to click event to.upButton。这将把事件附加到.upButton的所有实例,而不仅仅是第一个实例

接下来,既然可以创建一个变量并直接使用它,为什么还要执行两次DOM查找呢

第三,保留quantityBox的ID是可以的,因为我添加了一个上下文参数。这意味着获取clicked元素的父元素,在本例中,该元素将是td。然后,只查找该元素内部的#quantityBox


试一试。

$(“#quantityBox”,$(this.parent())可能返回多个输入。如果为True,则我编写此代码时假设它位于DataRepeater内,因此意味着它将被放置到td元素中。然而,为了缓解这种担忧,您可以像在您的帖子中那样将这2个输入封装在一个div中。这实际上可能是一种更具防御性的编码方式,因为假设通常是不好的:)别担心,我没有注意到,直到你让我重新考虑代码的复杂性,我记得我需要div来“范围”项模板中的交互。我认为这两种解决方案的组合可以很好地匹配:我会考虑使用自定义HTML属性的“最后一招”。我知道很多UI框架使用并依赖于自定义属性(尽管生成的html输出无效),但我一直被告知,如果在我们的控制下,这是一种不好的做法,应该避免。但在一个项目模板中,两个输入之间应该有一个链接,这样两个输入之间的交互就只限于该模板内,这一点确实很重要。@IvayloSlavov-data-属性是HTML5规范的一部分。
 $(".upButton").click(function () {
     var quantityBox = $("#quantityBox", $(this).parent());
     var currentValue = quantityBox.val();
     quantityBox.val(parseInt(currentValue) + 1);
 });