#jquery #list #jquery-ui
#jquery #Список #jquery-пользовательский интерфейс
Вопрос:
Я пытаюсь использовать jQuery для получения значений ListItems в неупорядоченном списке. Приведенный ниже код близок к рабочему, но он всегда возвращает значение первого ListItem, даже если установлен флажок для второго.
$(document).ready(function() {
$("li").click(function() {
$("input:checked").each(function() {
alert($("label").attr('InnerText'));
});
});
});
<div>
<ul class="AspNet-CheckBoxList-RepeatDirection-Vertical">
<li class="AspNet-CheckBoxList-Item">
<input id="CheckBoxList1_0" type="checkbox" name="CheckBoxList1$0" value="first1" />
<label for="CheckBoxList1_0">First $30.00</label>
</li>
<li class="AspNet-CheckBoxList-Item">
<input id="CheckBoxList1_1" type="checkbox" name="CheckBoxList1$1" value="second2" />
<label for="CheckBoxList1_1">Second $25.00</label>
</li>
</ul>
</div>
Комментарии:
1. Ваше предупреждение ссылается на атрибут, который не существует. В вашем оповещении должно отображаться «undefined».
2. попробуйте
.text()
вместоattr('innerText')
Ответ №1:
-
Использовать
.text()
вместо.attr('innerText')
—innerText
является свойством объекта javascript, не будет работать с использованием.attr()
. -
Используйте
$(this).next('label')
, чтобы получить соответствующую метку для флажка. В.each()
—$(this)
относится кcheckbox
и НЕli
нажата.
$("input:checked").each(function() {
alert($(this).next('label').text());
});
Ответ №2:
На данный момент $("label")
обрабатывает все метки на странице (то же самое с $("input:checked")
)
Возможно, вы захотите попробовать следующее, чтобы ограничить селекторы только дочерними элементами текущего сопоставляемого li
:
$(document).ready(function() {
$("li").click(function() {
$("input:checked", $(this)).each($.proxy(function() {
alert($("label", $(this)).attr('InnerText'));
}, this));
});
});
Кроме того, я не вижу InnerText
атрибута. Вы уверены, что это не должно было быть просто .text()
?
Ответ №3:
Надеюсь, это поможет
$(document).ready(function() {
$("li").click(function() {
if ($(this).find("input:checked")) {
alert($(this).find("label").text());
}
});
});
Приветствия!
Ответ №4:
Чтобы это заработало, просто измените код следующим образом
$("li").click(function() {
$("input:checked").siblings('label').each(function() {
alert($(this).text());
});
});
siblings()
Метод получает значения для input:checked
, в данном случае вы помечаете
Рабочий пример находится здесь