JQuery рядом, и это не работает - PullRequest
2 голосов
/ 26 мая 2011

Я пытаюсь установить флажок ввода, если отображается вопрос о версии b. Если они выбирают никогда, это уходит. Я использую два класса, чтобы слушать. Когда нажмете .showb, найдите следующий .bques и покажите его. Когда щелкнет .hidb, найдите следующий .bques и скройте его. Кажется, довольно легко, но я ломаю голову о том, почему это не работает. Пожалуйста, помогите.

Использование $ ("p"). Next (". Bques"). Show ("fast"); вместо $ (this) .next (". Bques"). show ("fast"); показывает все b вопросов на странице. Я также попытался .nextAll без удачи. Почему это не работает? Это проблема родного ребенка?

Код:

<!DOCTYPE html>
<html>
<head>
<style>
div { background:#def3ca; margin:3px; width:80px; 
display:none; float:left; text-align:center; }.bques{display:none;}
</style>
<script src="jquery-1.4.2.min.js"></script>
<script>$().ready(function() {

$(".showb").click(function () { $(this).next(".bques").show("fast"); });
$(".hidb").click(function () { $(this).next(".bques").hide("fast"); });

});
</script>
</head>
<body>
<p><strong>8a.</strong> How frequently do you see someone take a shortcut that could be dangerous for patients (for example, not washing hands long enough, not changing gloves when appropriate, failing to check armbands, forgetting to perform a safety check)? <br />
<input type="radio" name="shortcut" value="1" id="never8"  tabindex="38" class="required hidb" title="Please choose one of these answers." /><label for="never8"> Never</label> <br />
<input type="radio" name="shortcut" value="2" id="once8"  tabindex="39" class="showb" /><label for="once8"> Once a year</label> <br />
<input type="radio" name="shortcut" value="3" id="twice8"   tabindex="40" class="showb" /><label for="twice8"> Twice a year</label>
</p>

<p class="bques"><strong>8b.</strong> Think of the most recent times you've seen this happen. Who have you spoken with about the problem. Check each box that applies: <br />
<input type="checkbox" name="shortcut_cc[]" value="none" id="none8"   tabindex="44" title="Please choose at least one of these answers." /><label for="none8"> Have not spoken with anyone.</label> <br />
<input type="checkbox" name="shortcut_cc[]" value="ff"  id="ff8"  tabindex="45" /><label for="ff8"> Have spoken with friends and family.</label> <br />
<input type="checkbox" name="shortcut_cc[]" value="coworkers" id="coworkers8" tabindex="46" /><label for="coworkers8"> Have spoken with some of my co-workers.</label> <br />
</p>

<p><strong>9a.</strong>  How frequently do you see a situation where someone might be making a mistake when doing an assessment, doing triage, diagnosing, suggesting treatment/medication options, or performing a procedure? <br />
<input type="radio" name="mistake" value="1" id="never9"   tabindex="51" class="required hidb" title="Please choose one of these answers." /><label for="never9"> Never</label> <br />
<input type="radio" name="mistake" value="2" id="once9"   tabindex="52" class="showb" /><label for="once9"> Once a year</label> <br />
<input type="radio" name="mistake" value="3" id="twice9"   tabindex="53" class="showb" /><label for="twice9"> Twice a year</label> <br />
</p>

<p class="bques">9b. Think of the most recent times you've seen this happen. Who have you spoken with about the problem. Check each box that applies: <br />
<input type="checkbox" name="mistake_cc[]" value="none" id="none9"   tabindex="57" title="Please choose at least one of these answers." /><label for="none9"> Have not spoken with anyone.</label> <br />
<input type="checkbox" name="mistake_cc[]" value="ff"  id="ff9"  tabindex="58" /><label for="ff9"> Have spoken with friends and family.</label> <br />
<input type="checkbox" name="mistake_cc[]" value="coworkers" id="coworkers9" tabindex="59" /><label for="coworkers9"> Have spoken with some of my co-workers.</label>
</p>

</body>
</html>

Ответы [ 3 ]

3 голосов
/ 26 мая 2011

Изменить на

 $().ready(function() {

  $(".showb").click(function () { $(this).parent().next(".bques").show("fast"); });
  $(".hidb").click(function () { $(this).parent().next(".bques").hide("fast"); });

 });
1 голос
/ 26 мая 2011

$(this) работает, вы используете next, что неверно.

Из jQuery docs :

.next ([селектор])

Получить непосредственно следующего брата каждого элемента в наборе соответствующих элементов.Если указан селектор, он извлекает следующего родного брата, только если он соответствует этому селектору.

Нет радиоизлучений .hidb, соответствующих вашему селектору.Вам нужен следующий родной элемент элемента parent <p>.

$(this).parent().next(".bques").hide("fast");

.parent ([селектор])

Получить родительский элемент каждого элемента в текущем наборе соответствующих элементов, который может быть отфильтрован по выбору.

Первым шагом при отладке такой проблемы обычно является

alert($(this).next(".bques").length);

Что показывает, что ваш селектор не соответствует ни одному из элементов.

0 голосов
/ 26 мая 2011

Да, это проблема брата и сестры. Проблема в том, что .showb останавливается, как только доходит до конца того, что находится в его родительском элементе p. Поэтому он будет смотреть на следующие объекты - некоторую комбинацию <label>, <br> и <input>, пока не достигнет </p>, после чего он прекращает поиск и выполняет show() на пустом месте.

Вы хотите что-то вроде

$(".showb").click(function () { $(this).parent().next(".bques").show("fast"); });
$(".hidb").click(function () { $(this).parent().next(".bques").hide("fast"); });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...