Атрибут начинается с селектора = Атрибут начинается с селектора?

Я пытаюсь устранить ошибку, написанную другим разработчиком, и я не понимаю, как используется атрибут, начинающийся с селектора.

Внутри диалогового окна есть поля ввода с уникально установленными идентификаторами.

И затем, когда пользователь отправляет, функция прикрепляется вот так,

$('#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» для своего идентификатора, ETI_1234 и ETI_1235. Когда я использую отладчик в FireFox, я вижу, что только первый добавляется как свойство (это ошибка): «ETI_1234 = 17»

Ссылка на JQuery API: https://api.jquery.com/attribute-starts-with-selector/

Из API я понимаю пример и то, как работает селектор, когда правая сторона не использует другой селектор, но я не понимаю, как он используется в коде, который я устраняю.

🤔 А знаете ли вы, что...
HTML5 внедрил множество новых семантических элементов, таких как <header>, <footer>, <nav> и другие.


80
2

Ответы:

Решено

Если вы хотите добавить к объекту все элементы, вам необходимо изменить:

JQuerycollection[$('[id^ = "ETI"]').prop('id')] = $('[id^ = "ETI"]').val();

к:

$('[id^ = "ETI"]').each(function(){
  JQuerycollection[this.id] = this.value;
});

$('[id^ = "ETI"]').prop('id') вернет только одно значение, поскольку prop() возвращает только одно значение. Если стек результатов селектора имеет несколько элементов, он получит только значение первого результата, а не все из них.


Ошибка здесь в том, что $('[id^ = "ETI"]') - это селектор, который может возвращать более одного элемента, но при использовании с такими методами, как .prop() или .val(), вернет только значение первого элемента из нескольких элементов.

Чтобы исправить это, вы должны перебрать несколько возможных элементов $('[id^ = "ETI"]'), а затем выполнить присвоение значений каждому из них.

Что-то типа:

$.each($('[id^ = "ETI"]'), function(i, el) {
    JQuerycollection[$(el).attr('id')] = $(el).val();
});