#php #jquery #html #arrays #forms
#php #jquery #HTML #массивы #формы
Вопрос:
Почему входные массивы форм php ведут себя странно в jQuery?
Есть ли какой-нибудь способ преодолеть это?
Привет, я написал этот код, и он работает.. Обновление формы из 21 радиовхода, чтобы подчеркнуть метку рядом с отмеченными радиоприемниками.
* визуально — не так, как в теге html
$(function()
{
for(count = 0;count<21;count )
{
result = $("input:radio[name=choice" count "]:checked").val();
$("input[name="choice" count ""][ value="" result ""]").attr("class", "magic");
$("div.radio:has(input.magic)").attr("class", "radio spell");
}
$("input").click(function()
{
$("div.radio:has(input.magic)").attr("class", "radio");
$("input.magic").removeAttr("class", "magic");
var count = 0;
var result = 0;
for(count = 0;count<21;count )
{
result = $("input:radio[name=choice" count "]:checked").val();
$("input[name="choice" count ""][ value="" result ""]").attr("class", "magic");
$("div.radio:has(input.magic)").attr("class", "radio spell");
}
});
});
Вот css
input[type="radio"] {
height: 20px;
}
input[type="radio"] label {
color: #777;
font-weight:100;
letter-spacing: 1px;
}
input[type="radio"].magic label {
color: black;
font-style: italic;
/*text-decoration:underline;*/
font-weight: 600;
letter-spacing: 0px;
text-align: center;
display:inline-block;
width: 80px;
}
div.radio.spell {
border: outset white 2px;
}
Теперь используются следующие имена радио: choice0 — choice20
И это работает нормально.
До этого я использовал choice [0] — choice [20] И это вообще не сработало. Он вел себя очень странно.
Код jQuery был примерно таким: result = $(«input:radio[name=choice[» count «]]:проверено»).val(); …
Мне интересно, есть ли что-нибудь вокруг этого?
Спасибо за любой ценный вклад.
Комментарии:
1. Работает просто отлично, убедитесь сами jsfiddle.net/MqQh4
2. Делая этот выбор [20], вы создали еще один массив, вы соответствующим образом изменили свой ajax, чтобы он мог справиться с этим?
Ответ №1:
[
и ]
используются для селекторов атрибутов в jQuery, вам нужно экранировать их, чтобы использовать их как часть строки : $(":radio[name=choice[" count "]]")
.
Тем не менее, это довольно неудобный способ манипулирования группами элементов. Самый простой способ — создать структуру HTML, которая отражает эти группы, и использовать ее для поиска других членов группы:
$(function() {
$(":radio[name^=choice]:checked").each(function() {
$(this).closest('div.radio').attr("class", "radio spell")
.find("input[name^=choice]").attr("class", "magic");
});
});
и т.д.