Я пытаюсь устранить ошибку, написанную другим разработчиком, и я не понимаю, как используется атрибут, начинающийся с селектора.
Внутри диалогового окна есть поля ввода с уникально установленными идентификаторами.
И затем, когда пользователь отправляет, функция прикрепляется вот так,
$('#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> и другие.
Если вы хотите добавить к объекту все элементы, вам необходимо изменить:
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();
});