Я сейчас читаю
jQuery Cookbook и буду публиковать в блоге несколько интересных примеров, которые мне попадаются и пополам, хотя бы немного. Надеюсь, это имеет больше смысла для неподготовленного глаза. Итак, начнем! Рассмотрим форму как таковую:
Кто собирается выиграть кубок Heineken в следующем году?
Нажмите на любую из команд, обратите внимание, что выбран радио-блок. Затем начните вводить текст в поле «Другое». Не странно ли, что ранее выбранная вами команда все еще выбрана, хотя вы явно начали вводить текст в поле «Другое». Должен ли пользователь серьезно выбирать радиокнопку «прочее», хотя индикация «прочее» уже была дана? Теперь на этот раз очистите текстовое поле «прочее» и выберите другую команду. Затем выберите «другой» переключатель. Обратите внимание, что «другое» текстовое поле не имеет фокуса, даже если вы вряд ли нажмете другое поле и не хотите ничего печатать. Вы не настолько иррациональны. Дело в том, что когда выбран переключатель «Другое», имеет смысл, что смежное текстовое поле должно получить фокус. Помнить,хорошее удобство использования означает, что пользователь может достичь того, что он хочет, с меньшим количеством нажатий. И помните, хорошее удобство использования означает, что все интуитивно понятно, а графический интерфейс не отображает противоречий. Итак, мы действительно хотим что-то вроде этого:
Кто собирается выиграть кубок Heineken в следующем году?
Так как мы это сделали? Что ж, давайте посмотрим на код:
<html> <head> <script type="text/JavaScript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"> </script> </head> <body> Consider a form as such: <p>Who is going to win the Heineken cup next year?</P> <ul id="choice"> <li> <input name="source" id="source1" type="radio" value="Leinster"/> <label for="source1">Leinster</label> </li> <li> <input name="source" id="source2" type="radio" value="Munster"/> <label for="source2">Munster</label> </li> <li> <input name="source" id="source3" type="radio" value="Ulster"/> <label for="source3">Ulster</label> </li> <li> <input name="source" id="source4" type="radio" value="Connacht"/> <label for="source4">Connacht</label> </li> <li> <input name="source" id="source5" type="radio" value="Other"/> <label for="source5">Other</label> <input name="Source5Txt" id="Source5Txt" type="text"/> </li> </li> </ul> <script> $('#choice input:text').(function() { // store some variables locally as they are used more than once. var $inputText = $(this); var $radioBtn = $inputText.siblings('input:radio'); // all sibling radio buttons // If any of the sibling radio buttons change, check to see $radioBtn.change(function(){ // if it checked focus on the text input if (this.checked) {$inputText.focus();} }); // listen for the blur event on the text input $inputText.keypress(function() { $radioBtn.attr('checked', true); }); }); </script> </body> </html>
Обсуждение:
- : text — это селектор класса JQuery psuedo, который выбирает все элементы типа text. Согласно рекомендациям JQuery, селекторам псевдокласса должен предшествовать другой селектор или элемент тега, в противном случае подразумевается универсальный селектор. В этом случае мы делаем ввод: текст . В этом случае будет выбрано только одно текстовое поле. Ничего страшного.
- .Each (function () {в этом случае означает итерацию общих вводов типа text и выполнение указанной функции. Не забывайте, что «.each» может работать с наборами элементов любого размера, включая только 1, как в этом случае пример.
- $ (this) соответствует объекту, которым управляет каждый. В этом случае это каждое поле ввода текста. Если вы не верите мне, добавьте:
console.log("this is: " + $(this)[0].id);
и вы увидите что-то вроде:
это: Source5Txt в консоли.
- Кнопка inputText и переключатель хранятся в локальном контексте. Это для эффективности.
До следующего раза, береги себя.