Результат с получением значения inputHidden из a4j:form с помощью javascript

#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();
  

Спасибо за ваши ответы 🙂