属性以选择器开头=属性以选择器开头?

时间:2018-11-13 15:33:18

标签: jquery html

我正在尝试解决另一个开发人员编写的错误,并且我不了解使用“属性以选择器开头”的方式。

在对话框中,有带有唯一设置的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,我了解了示例以及右侧不使用其他选择器时选择器的工作方式,但是我不理解在我要进行故障排除的代码中如何使用选择器。

2 个答案:

答案 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();
});