如何在有或没有 Jquery 的 Javascript 中通过 data-* 值查找 CheckBox

How to find a CheckBox by a data-* Value in Javascript with or without Jquery

提问人:Andy 提问时间:11/8/2023 最后编辑:Andy 更新时间:11/8/2023 访问量:40

问:

我在 ASP.NET 视图上有几个复选框。从 Javascript 函数中,我需要不是通过 ID 或 NAME 来查找复选框,而是通过复选框上 data-selection-productid 属性中的值来查找复选框。

复选框如下:

<input type="checkbox" asp-for="@si.IsSelected"
       data-selection-productid="@si.ProductID"                      
       data-linenumber="@si.LineNumber"
       value="@si.ProductID"
       onclick="selectionChanged(this)" />

上面的 selectionChanged 函数引用不是需要查找 CheckBox 的函数,而是以下 Textbox 事件需要 CheckBox。下面的代码位于 foreach 循环中,为集合中的产品数量生成此代码行和第一组代码行。正是出于这个原因,ID 和名称都不起作用。它们将被复制。不重复的是复选框内 data-selection-productid 值中的值。

<input type="number" asp-for="@si.Quantity" 
       data-productid="@si.ProductID"
       data-linenumber="@si.LineNumber"
       value="@si.Quantity"
       onclick="quantityChanged(this)" /> 

因此,从 quantityChanged 函数中,我需要找到 CheckBox,其 data-selection-productid 值与上面文本框中的 data-productid 值相同。

我尝试了以下代码的几种变体,但无济于事。我已经验证了 textBox 中的 productid 是否有效,并且与显示页面时相同。

theCheckBox = ("input").find(`[data-selection-productid='${productid}']`);

当执行到达上述代码行时,javascript 终止。

任何帮助将不胜感激。

JavaScript HTML jQuery 属性

评论

0赞 traktor 11/8/2023
有关如何执行此操作的示例,请参阅 W3C 选择器 3 级标准第 6.3.1 节。选择器 4 级文档涵盖了类似的材料,但目前仍处于草稿阶段。

答:

1赞 Loebstahhhh 11/8/2023 #1

代码不起作用的原因是,您尝试在非 JQuery 对象上调用 JQuery 函数(缺少 $ 符号)。

但是,您可以在纯 Javascript 中非常轻松地做到这一点。如果产品 ID 保存到变量中,则可以使用以下查询选择器:productId

document.querySelectorAll(`input[data-selection-productid="${productId}"]`);

这将选择具有属性“data-selection-productid”且值为“valuehere”的所有“input”元素。

此外,如果属性的值无关紧要,您还可以选择具有“data-selection-productid”属性的所有元素,无论其值如何:

document.querySelectorAll(`input[data-selection-productid]`);

评论

0赞 Andy 11/8/2023
productID 确实很重要,我不知道如何将 id 添加到您建议的查询中。我需要使“valuehere”类似于document.querySelectorAll(input[data-selection-productid="@si.productID"]);
0赞 Loebstahhhh 11/8/2023
@Andy查看更新的答案。
0赞 Andy 11/8/2023
效果很好。