JQuery Selector для выбора с идентификатором: 1 - PullRequest
2 голосов
/ 05 мая 2011

У меня есть следующий выбор с необычным атрибутом ID / Имя:

<select name="customfield_10021:1" id="customfield_10021:1" class="select cascadingselect-child">

Это не позволяет мне выбирать его с помощью:

unit = $('#customfield_10021:1 option:selected').text();

http://jsfiddle.net/stzPQ/

uncaught exception: Syntax error, unrecognized expression: 1

Как выбрать это поле?Я никогда прежде не видел этот конкретный синтаксис, но он, очевидно, работает при отправке.

Спасибо!

Джаред

Ответы [ 8 ]

8 голосов
/ 05 мая 2011

Escape :, используя \\

unit2 = $('#customfield_10021\\:1 option:selected').text();

Обновленный jsfiddle

Или вы можете использовать document.getElementById("customfield_10021:1") какконтекст для вашего селектора.

var s = document.getElementById("customfield_10021:1");
unit2 = $('option:selected', s).text();
4 голосов
/ 05 мая 2011

Побег из толстой кишки:

unit = $('#customfield_10021\\:1 option:selected').text();

См. jQuery FAQ .


Вместо использования option:selected вы можете просто использовать .val(), чтобы получить значение <select>:

unit = $('#customfield_10021\\:1').val();
4 голосов
/ 05 мая 2011

Вы должны избежать двоеточия, поэтому сделайте это:

$("#customfield_10021\\:1")

Вы бы получили:

unit = $('#customfield_10021\\:1 option:selected').text();

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

2 голосов
/ 05 мая 2011

Попробуйте это:

unit = $('#customfield_10021\\:1 option:selected').text();

: обычно используется для псевдо-селекторов, а обратный слеш должен быть удвоен в строковом литерале.

Во избежание сомненийсимвол двоеточия является допустимым в атрибутах ID и Name.

1 голос
/ 05 мая 2011

Я думаю, что работает:

unit = $("#customfield_10021\\:1 option:selected").text();
1 голос
/ 05 мая 2011

Это работает:

$('[id="customfield_10021:1"] option:selected').text()

Демонстрационная версия: http://jsfiddle.net/stzPQ/2/

0 голосов
/ 13 апреля 2013

Другим решением в JSF является предотвращение добавления имени формы перед каждым идентификатором.

Это можно сделать с помощью prependId = "false" в теге формы:

            <h:form id="gestion_clefs" prependId="false">
0 голосов
/ 05 мая 2011

Помните, что двоеточие используется для разграничения псевдокласса. Как и в случае с option:selected, вам придется удалить двоеточие из идентификатора вашего элемента:

<select name="customfield_10021_1" id="customfield_10021_1" class="select cascadingselect-child">

Это потому, что jQueryпытается использовать #customfield_10021:1 как id = customfield_10021 с псевдоклассом 1, который не существует, таким образом, ошибка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...