Вопрос выбора jQuery - PullRequest
       15

Вопрос выбора jQuery

0 голосов
/ 10 января 2010

В настоящее время я пишу некоторую проверку формы с помощью jQuery, и у меня возникла следующая проблема.

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

<input type="text" id="user[name]" />
<input type="text" id="user[email]" />

Это означает, что когда данные будут опубликованы в моем скрипте, у меня будет доступный массив "user", поэтому я могу делать такие вещи, как $user["name"], однако, когда я пытаюсь выбрать входы с помощью jquery, выполнив .. * это не сработает. Но если у меня просто есть идентификатор ввода как «имя пользователя», то var name = $("#username") будет работать.

Я предполагаю, что это связано с селекторами CSS в jquery, так как я пытаюсь получить доступ к объекту пользователя с идентификатором имени? подобно тому, как $("input[username]") выберет вход с идентификатором имени пользователя.

Любые идеи о том, как я могу обойти это? И будет ли это работать во всех браузерах?

Ответы [ 4 ]

1 голос
/ 10 января 2010

Значение id элемента формы - это не то, что передается на сервер, оно используется только внутри документа DOM и языками сценариев. Это name, который передается.

Ваши элементы формы должны быть изменены на что-то вроде этого:

<input type="text" id="username" name="user[name]" />
<input type="text" id="useremail" name="user[email]" />

Спецификация HTML 4 касается правильного именования элементов:

Жетоны ID и NAME должны начинаться с буква ([A-Za-z]) и может сопровождаться по любому количеству букв, цифр ([0-9]), дефисы ("-"), подчеркивание ("_"), двоеточия (":") и точки ( "").

Использование квадратных скобок в атрибуте name является обычной техникой для передачи данных в формате массива на язык сценариев на стороне сервера, но использование их в id, безусловно, запутает JQuery.

0 голосов
/ 10 января 2010

Прежде всего, знайте, что атрибут name - это то, что публикуется, а не id.

Теперь к вопросу

чтобы получить доступ к <input type="text" id="user[name]" /> с помощью jQuery, вам нужно сделать это следующим образом

var name = $("input[id='user[name]']");
0 голосов
/ 10 января 2010

Попробуйте один из них:

$("[id='user[name]']")
$("#user\\[name\\]")
$("#user\\005Bname\\005D")
0 голосов
/ 10 января 2010

Я не совсем удивлен, что селектор не работает, потому что ваши идентификаторы недействительны согласно спецификации HTML :

Жетоны ID и NAME должны начинаться с буква ([A-Za-z]) и может сопровождаться по любому количеству букв, цифр ([0-9]), дефисы ("-"), подчеркивание ("_"), двоеточия (":") и точки ( "").

В руководстве по PHP есть руководство по правильному способу передачи элементов формы в виде массива на сервер с использованием атрибута name вместо идентификатора:

<input name="MyArray[keyOne]" />
<input name="MyArray[keyTwo]" />
<input name="MyOtherArray[]" />
<input name="MyOtherArray[]" />
...