我正在尝试解决另一个开发人员编写的错误,并且我不了解使用“属性以选择器开头”的方式。
在对话框中,有带有唯一设置的ID的输入字段。
然后,当用户提交时,该功能将被附加
$('#dialogform').dialog({
autoOpen: false,
height: 925,
width: 1025,
modal: true,
buttons: {
Submit: function () {
var JQuerycollection = $('#dialogform').data();
if (JQuerycollection.isClosed.val() == "False") {
JQuerycollection["msg"] = "Submit";
JQuerycollection[$('[id^="ETI"]').prop('id')] = $('[id^="ETI"]').val();
然后进行字符串化并通过ajax发送到后端:
data: JSON.stringify({ JSONcollection: JQuerycollection, dlgMsg: "Submit" })
有两个以“ ETI”开头的ID作为输入元素,即ETI_1234和ETI_1235。在FireFox中使用调试器时,只能看到第一个作为属性添加(这是bug),即“ ETI_1234 = 17”
引用JQuery API:https://api.jquery.com/attribute-starts-with-selector/
通过API,我了解了示例以及右侧不使用其他选择器时选择器的工作方式,但是我不理解在我要进行故障排除的代码中如何使用选择器。
答案 0 :(得分:1)
如果要将所有元素添加到对象,则需要更改:
JQuerycollection[$('[id^="ETI"]').prop('id')] = $('[id^="ETI"]').val();
收件人:
$('[id^="ETI"]').each(function(){
JQuerycollection[this.id] = this.value;
});
$('[id^="ETI"]').prop('id')
将仅返回一个值,因为prop()
仅返回一个值。如果选择器的结果堆栈包含多个元素,则它将仅获取第一个结果的值,而不是全部。
答案 1 :(得分:1)
这里的错误是$('[id^="ETI"]')
是一个选择器,可能会返回多个项目,但是与.prop()
或.val()
之类的方法一起使用时,只会返回第一个项目的值多个项目中。
要解决此问题,您应该遍历可能的多个元素$('[id^="ETI"]')
,然后在每个元素上进行值分配。
类似的东西:
$.each($('[id^="ETI"]'), function(i, el) {
JQuerycollection[$(el).attr('id')] = $(el).val();
});