JavaScript警报未提供正确的fileID值
我有一个JSP页面,其中列出了如下文件: 每个文件都有自己唯一的文件id,我尝试实现for循环以获取选中复选框的文件的文件id 我的JS:JavaScript警报未提供正确的fileID值,javascript,Javascript,我有一个JSP页面,其中列出了如下文件: 每个文件都有自己唯一的文件id,我尝试实现for循环以获取选中复选框的文件的文件id 我的JS: function fireGENURL(a){ try{ var selectedFiles = $('.fileCheck:checked'); // var fileID =$(selectedFiles[0]).attr('fileid'); var count = 0; fo
function fireGENURL(a){
try{
var selectedFiles = $('.fileCheck:checked');
// var fileID =$(selectedFiles[0]).attr('fileid');
var count = 0;
for(var file in selectedItems){
file=$(selectedFiles).attr('fileid');
count += 1;
alert(file+"has been selected");
}
当我在一个框上打勾时,它会正确返回警报值,但当我在两个框上打勾时,它会返回警报两次,但会返回第一个复选框的fileID。它返回两次相同的ID,但我的预期结果是它返回各自的ID
我在这里犯了什么错误吗
编辑
使用each遍历.fileCheck:checked集合,然后可以在回调中使用$this引用包含该元素的jQuery对象。在这一点上,您可以调用.attr'fileid'来获取所需的内容:
const $fileChecks = $('.fileCheck:checked');
$fileChecks.each(function() {
const file = $(this).attr('fileid');
alert(file+"has been selected");
});
const count = $fileChecks.length;
您也可以考虑使用数据属性而不是像FielID这样的非标准属性:
const不受Javascriptconst支持。ES2015中引入了const,这是很久以前的事了,它确实是有效的语法,大多数浏览器都支持它。一般来说,最好使用最新最好的语言版本编写,并将其传输到ES5进行生产,以便像IE这样过时的浏览器能够理解它,但是对于这里发生的事情,您可以使用var,而不是var。您的答案工作得很好,但是您介意对代码进行一点深入的解释吗?我无法理解这在每个回调中都引用了您正在迭代的项。获取.attr将返回jQuery对象中第一个元素的值,因此要在检索所有属性时使用.attr,首先必须创建一个只包含一个元素的jQuery对象。当然,您也可以使用普通的DOM方法来实现这一点,jQuery只会使这一点变得更加复杂,那么如何将这个fileid传递给jQuery数据:{nodeid=file}?因为它一直抛出引用id:找不到文件
const $fileChecks = $('.fileCheck:checked');
$fileChecks.each(function() {
const file = $(this).attr('fileid');
alert(file+"has been selected");
});
const count = $fileChecks.length;
<input type="checkbox" data-fileid="foo">
$(this).data('fileid');