#jquery #jquery-selectors
#jquery #jquery-селекторы
Вопрос:
У меня есть следующий select с необычным атрибутом ID / Name:
<select name="customfield_10021:1" id="customfield_10021:1" class="select cascadingselect-child">
Похоже, это не позволяет мне выбирать его с помощью:
unit = $('#customfield_10021:1 option:selected').text();
uncaught exception: Syntax error, unrecognized expression: 1
Как я могу выбрать это поле? Я даже никогда раньше не видел этот конкретный синтаксис, но он, по-видимому, работает при отправке.
Спасибо!
Джаред
Комментарии:
1. Взгляните на документацию: api.jquery.com/category/selectors
2. Спасибо всем за ответы. Проблема была между ушами, поскольку я больше фокусировался на необычном атрибуте ID / Name, чем на синтаксисе селектора.
Ответ №1:
Выход из :
с помощью \
unit2 = $('#customfield_10021\:1 option:selected').text();
Или вы можете использовать document.getElementById("customfield_10021:1")
в качестве контекста для вашего селектора.
var s = document.getElementById("customfield_10021:1");
unit2 = $('option:selected', s).text();
Ответ №2:
Вы должны избегать двоеточия, поэтому сделайте это:
$("#customfield_10021\:1")
У вас было бы:
unit = $('#customfield_10021\:1 option:selected').text();
Это потому, что двоеточие является специальным символом, и его нужно экранировать обратной косой чертой.
Надеюсь, это поможет. Приветствия
Ответ №3:
Не используйте двоеточие:
unit = $('#customfield_10021\:1 option:selected').text();
Смотрите Часто задаваемые вопросы по jQuery.
Вместо использования option:selected
вы можете просто использовать .val()
для получения значения <select>
:
unit = $('#customfield_10021\:1').val();
Комментарии:
1. Нет, мне нужен текст; значение является индексом для текстового значения.
2. Хорошо, просто хотел убедиться, что вы не слишком усложняете ситуацию.
Ответ №4:
Попробуйте это:
unit = $('#customfield_10021\:1 option:selected').text();
:
Обычно используется для псевдоселекторов, и обратная косая черта должна быть удвоена в строковом литерале.
Во избежание сомнений, символ двоеточия является допустимым в атрибутах ID и Name.
Ответ №5:
Это работает:
$('[id="customfield_10021:1"] option:selected').text()
Живая демонстрация: http://jsfiddle.net/stzPQ/2 /
Комментарии:
1. Это интересный подход. Я полагаю, это исключило бы двоеточие, интерпретируемое как селектор.
2. @Jared Да, я так считаю. Кавычки внутри селектора атрибутов гарантируют, что строка действительно является именем, а не другим селектором.
Ответ №6:
Я думаю, что это работает:
unit = $("#customfield_10021\:1 option:selected").text();
Ответ №7:
Помните, что двоеточие используется для разграничения псевдокласса, точно так же, как вы делаете с option:selected
, вам придется удалить двоеточие из идентификатора вашего элемента:
<select name="customfield_10021_1" id="customfield_10021_1" class="select cascadingselect-child">
Это потому, что jQuery пытается использовать #customfield_10021:1
как id = customfield_10021
с псевдоклассом 1
, который не существует, отсюда и ошибка.
Комментарии:
1. Правильно! Единственная проблема в том, что я не могу удалить двоеточие (это пользовательское поле в системе JIRA).
2. Затем вам нужно будет исключить двоеточие, как предлагали другие.
3. Этот ответ неверен — ему не придется удалять двоеточие. Ему просто нужно избежать этого.
Ответ №8:
Другое решение в JSF — запретить указывать имя формы перед каждым идентификатором.
Это можно сделать с помощью prependId=»false» в теге формы :
<h:form id="gestion_clefs" prependId="false">