Выбор нескольких опций в окне множественного выбора с «[]» в его имени, с помощью AJAX - PullRequest
1 голос
/ 06 апреля 2011

Я пытаюсь динамически выбирать опции в окне множественного выбора из данных, полученных из ajax.

HTML

<select multiple="multiple" id="sbox[]" name="sbox[]">
   <option value="1">1</option>
   <option value="2">2</option>
   <option value="3">3</option>
</select>

JQuery

$.post(
    "test.php",
    {
       action: "test"
    },
    function(data) {
       //data received is in the format of "2,3"
       splitText = data.split(",");
       $.each(splitText, function(k,v) {
           $("#sbox[]").children("option[value="+v+"]").attr("selected","selected");
       });
    }
);

Ноэто не работает.

Ответы [ 6 ]

2 голосов
/ 06 апреля 2011

1001 * попробовать *

$.post(
    url: "test.php",
    function(data) {
       //data received is in the format of "2,3"
       splitText = data.split(",");
       $.each(splitText, function(k,v) {
           $("#sbox\[\]").children("option[value="+v+"]").attr("selected","selected");
       });
    }
);
1 голос
/ 06 апреля 2011

Это не работает, потому что jQuery считает #sbox[] селектором идентификатора #sbox с пустым селектором атрибута [], что недопустимо.

Вы можете убрать квадратные скобки, чтобы ваш селектор стал #sbox\[\]. Но квадратные скобки не нужны в вашем удостоверении личности; просто назовите это id="sbox" и выберите #sbox. Квадратные скобки необходимы только в атрибуте name для обозначения вашего выбора как массива значений.

0 голосов
/ 06 апреля 2011

Здесь есть несколько возможных проблем, попробуйте это:

$.post(
"test.php",
{
   action: "test"
},
function(data) {
   //data received is in the format of "2,3"
   var splitText = data.split(",");
   var select = $('[id="sbox[]"]').get(0);
   $.each(splitText, function(k,v) {
       $.each(select.options, function(i, option) {
           if(option.value == v)
               option.selected = true;
           else
               option.selected = false;
       });
   });
}
);

Первое, что селектор #id работает хорошо, когда id является буквенно-цифровым (- и _ также допускаются). Поэтому, чтобы использовать подстроку [] в идентификаторе, вы бы хотели найти ее с помощью селектора атрибутов. В качестве альтернативы, если это единственный идентификатор, начинающийся с sbox, вы можете попробовать это: $('[id^=sbox]').

Еще один элемент, который необходимо исправить - это установка атрибута selected на <option>. Я не уверен, что он работает так, как вы ожидали, но обращение к объекту Option DOM, как показано выше, должно работать нормально.

Последним является незначительное исправление - вы находите элемент <select> на каждой итерации цикла, вероятно, вы захотите сделать это один раз перед началом цикла.

Надеюсь, это поможет.

0 голосов
/ 06 апреля 2011

Было бы проще, если бы вы изменили идентификатор.

Если вы абсолютно обязаны это сделать, вы должны снять скобки, поскольку они используются в синтаксисе селектора

change $("#sbox[]")

to $("#sbox\[\]")
0 голосов
/ 06 апреля 2011

Если это именно тот код, который вы используете, тогда значение в $ .each не определено. Вы используете идентификатор v в функции. должно быть как

$("#sbox[]").children("option[value="+v+"]").attr("selected","selected");

И вы ДОЛЖНЫ изменить идентификатор. Начиная с w3, знаки [] не допускаются

Указывает уникальный идентификатор для элемента. Правила именования:

Должен начинаться с буквы A-Z или a-z Может сопровождаться: буквы (A-Za-z), цифры (0-9), дефисы ("-"), подчеркивания ("_"), двоеточия (":") и периоды (".") Значения чувствителен к регистру

0 голосов
/ 06 апреля 2011

вы используете value в каждом цикле вместо v, как параметр назван в объявлении

   $.each(splitText, function(k,v) {
       $("#sbox[]").children("option[value="+v+"]").attr("selected","selected");
   });
...