Селектор jquery не может читать из скрытого поля - PullRequest
14 голосов
/ 15 июня 2009

( ответы объединены в другой вопрос )

Работает следующий код jquery 1.3.2:

<input type="select" value="236434" id="ixd" name='ixd' />

<script>
console.log( $('#ixd') );
console.log( $("input[name='ixd']") );
</script>

Консоль показывает:

[input # ixd 236434]

[input # ixd 236434]

Однако установка входа на «скрытый» мешает работе селекторов. Есть какие-нибудь подсказки?

<input type="hidden" value="236434" id="ixd" name='ixd' />

<script>
console.log( $('#ixd') );
console.log( $("input[name='ixd']") );
</script>

Консоль показывает:

* * Тысяча двадцать-одина [] * * тысяча двадцать две

[]

Ответы [ 6 ]

27 голосов
/ 15 июня 2009

Не уверен, почему это не получится. Я делаю то же самое на работе на регулярной основе, и это работает независимо от того, скрыто ли поле формы или нет.

Возможно, попробуйте это:

<input type="hidden" value="236434" id="ixd" name='ixd' />

<script>
    console.log($("#xid").val())
</script>

Это даст вам значение скрытого поля. Чтобы получить значение из поля формы, необходимо использовать метод .val().

9 голосов
/ 15 июня 2009
<input type="select" value="236434" id="ixd" name='ixd' />

Это даже допустимая разметка?

Похоже, что выбор видимого ввода извлекает его значение, даже без явного вызова .val(), тогда как выбор скрытого не делает:

Попробуйте:

console.log( $('#ixd').val() );
console.log( $("input[name='ixd'][type='hidden']") );

и

console.log( $("input[name='ixd']").val() );
2 голосов
/ 15 июня 2009

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

Если вы просто пытаетесь проверить, был ли найден объект, проверьте свойство length

console.log( $('#xid').length );

Если вы пытаетесь получить значение поля, используйте метод val

console.log( $('#xid').val() );

Наконец, возможно, что в вашем решении DOM еще не загружен полностью. Убедитесь, что вы заключаете свою логику в вызов document.ready.

$(document).ready(function() {
    console.log( $('#xid').val() );
});
1 голос
/ 10 мая 2012

Если вы делаете это в ASP.Net, проверьте идентификатор вашего элемента управления во время выполнения с помощью опции View Source в вашем браузере. Вы можете обнаружить, что ваш идентификатор элемента управления не соответствует ожидаемому, если, например, ваш элемент управления объявлен на странице содержимого. В этом случае ему будет присвоен идентификатор, управляемый его главной страницей. Вместо жесткого кодирования идентификатора в вашем jQuery вы можете обратиться к его свойству ClientID с помощью встроенного синтаксиса ASP.Net, который также защитит вас от любых изменений в иерархии элементов управления главной страницы или страницы содержимого.

Итак ...

$('#<%= myHiddenControl.ClientID %>').val();

... будет лучшим выбором, чем ...

$('#ctl00_ContentPlaceHolder1_ctl00_ContentPlaceHolder1_myHiddenControl').val();

... хотя они оба будут работать.

0 голосов
/ 30 марта 2016

Если ничего из вышеперечисленного не работает, попробуйте

$('#xid').attr('value');
0 голосов
/ 15 декабря 2010

У меня была проблема, когда выполнение $('#field_id').val() не возвращало никакого значения, потому что скрытые поля были вложенными (body > div > form > ul > li > p). Перемещение его из ul решило проблему.

...