Javascript 当选择器以1个元素为目标时,jQuery.data()函数起作用,但当选择器以多个元素为目标并对其进行迭代时,函数不起作用
因此,我试图读取选中的每个复选框的数据值,为此,我有以下代码:Javascript 当选择器以1个元素为目标时,jQuery.data()函数起作用,但当选择器以多个元素为目标并对其进行迭代时,函数不起作用,javascript,jquery,Javascript,Jquery,因此,我试图读取选中的每个复选框的数据值,为此,我有以下代码: var jobjChk = $("input:checkbox[name=resourceSelect]:checked"); jobjChk.each(function () { receivers[receivers.length] = this.data("data-email"); }); 现在,当只选中一个复选框,并且我使用this.data时,代码会按预期工作。当我使用上面的代码并选中多个复选框时,“我得到的对
var jobjChk = $("input:checkbox[name=resourceSelect]:checked");
jobjChk.each(function () {
receivers[receivers.length] = this.data("data-email");
});
现在,当只选中一个复选框,并且我使用this.data时,代码会按预期工作。当我使用上面的代码并选中多个复选框时,“我得到的对象不支持属性或方法‘数据’”。但是两者都应该是jquery对象(并支持.data())?您的假设是错误的。本声明: 但两者都应该是jquery对象(并支持.data()) 这是不正确的。
.each()
回调中的this
是实际的DOM元素,而不是jQuery对象。如果要使用jQuery函数,需要创建一个包含该单个元素的新jQuery对象:
jobjChk.each(function () {
receivers[receivers.length] = $(this).data("data-email");
});
更新此行:
receivers[receivers.length] = $(this).data("data-email");
或者,如果您的复选框中包含类似以下内容的attrdata-email=”abc@xyz.com“
然后您可以使用:
receivers[receivers.length] = $(this).data("email");
见: 在您的代码中,此属于文档中的dom节点,而不是像这样用
$(this)
或jQuery(this)
包装的jQuery对象
所以
此
属于dom节点。$(此)
是jQuery对象。检查此小提琴:
首先换行
receivers[receivers.length] = this.data("data-email");
到
接下来,在读取数据属性时,您应该使用类似于此的$(this).data(“email”)
而不是此$(this).data(“data email”)
,您的HTML应该如下所示
<input type="checkbox" name="resourceSelect" value="dog" data-email="a@a.com" />I have a dog
我有一只狗
使用$(this.data(),而不是this.data())
<input type="checkbox" name="resourceSelect" value="dog" data-email="a@a.com" />I have a dog