#javascript #jquery #jsf #hidden-field #ajax4jsf
#javascript #jquery #jsf #скрытое поле #ajax4jsf
Вопрос:
У меня следующая проблема. Мне нужно получить скрытое значение, которое находится в a4j:form, из javascript.
<a4j:form id="orderModalFormId">
<h:form style="display:none;" prependId="false">
<h:inputHidden id="maxVal" value="#{bean.maxVal}"/>
</h:form>
//...rest code where javascript is used
</a4j:form>
в javascript
...
var maxValue = jQuery('#orderModalFormId : maxVal').val();
...
Проблема в том, что во время отладки javascript максимальное значение по-прежнему остается неопределенным.
Я совсем новичок в javascript и jQuery.
В чем хитрость?
Спасибо!
Ответ №1:
Создать HTML-код психологически сложно, но вам почти наверняка нужен простой id
селектор:
var maxValue = jQuery('#maxVal').val();
Судя по редактированию, вам это нужно:
var maxValue = jQuery('#orderModalFormId\:maxVal');
Вам нужно экранировать :
, чтобы jQuery не анализировал его как псевдоселектор. Вам нужно использовать экранированную обратную косую черту ( \:
), чтобы Javascript не интерпретировал :
как экранированное двоеточие.
Смотрите jsFiddle для примера экранированного двоеточия в id
селекторе.
Комментарии:
1. Сгенерированный HTML-идентификатор является
orderModalFormId:maxVal
.2. В данном конкретном случае, да. Но другие способы могут быть более полезными для случая, когда у вас есть, например,
"orderModalFormId:maxVal"
или один"maxVal"
в переменной.
Ответ №2:
:
Является недопустимым символом в селекторах CSS, и эти пробелы не делают его лучше.
Либо используйте старый добрый JS:
var value = document.getElementById("orderModalFormId:maxVal").value;
Или экранирования его с помощью двойной обратной косой черты:
var value = jQuery("#orderModalFormId\:maxVal").val();
Или используйте селектор атрибутов jQuery:
var value = jQuery("id=['orderModalFormId:maxVal']").val();
Или когда JS встроен в страницу JSF (и вы уже используете RichFaces):
var value = #{rich:component('maxVal')}.val();
Ответ №3:
На самом деле, вы оба были правы насчет синтаксиса, но проблема была другого характера. Оказалось, что моя ajax-форма не работает с моим javascript должным образом, поэтому я просто ввел параметр maxVal в эту a4j: form с помощью ui: include (моя a4j: form находится в отдельном файле xhtml). Вот так:
MainPage.xhtml
<h:form style="display:none;" prependId="false">
<h:inputHidden id="maxVald" value="#{mainBean.maxVal}"/>
</h:form>
<ui:include src="/xhtml/include/orderModalForm.xhtml">
<ui:param name="maxVal" value="#{mainBean.maxVal}"/>
</ui:include>
и в javascript мне понравилось это
var maxFreezePeriod = jQuery('#maxFreezePeriod').val();
Спасибо за ваши ответы 🙂