#jquery #ajax #jsf #jakarta-ee #jsf-2
#jquery #ajax #jsf #джакарта-ee #jsf-2
Вопрос:
В выходных данных следующей разметки Java Server Faces (JSF) поле ‘Description’ изначально не отображается и отображается (с помощью Ajax) при вводе входных данных в поле ‘Name’.
При вводе (более 5 символов) в поле Описания поле должно выделяться красным цветом в соответствии с кодом jQuery. Но этого не происходит.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core">
<h:head>
<title>title</title>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script>
<script type="text/javascript">
jQuery (document).ready(function(){
jQuery("#description").keypress(function(){
if (jQuery(this).val().length >5){
jQuery(this).css("background-color", "red");
}else{
jQuery(this).css("background-color", "white");
}
console.log(jQuery(this).val().length);
})
})
</script>
</h:head>
<h:body>
<h:form prependId="false">
Name: <h:inputText id="name" value="#{viewScope.name}">
<f:ajax execute="@this" render="@form"/>
</h:inputText>
<br/>
<h:outputText id="descriptionLabel" value="Description:" rendered="#{empty viewScope.name ? false : true}"/>
<h:inputText id="description" value="#{viewScope.description}" rendered="#{empty viewScope.name ? false : true}"/>
<!-- <h:outputText id="descriptionLabel" value="Description:" />
<h:inputText id="description" value="#{viewScope.description}" />-->
</h:form>
</h:body>
</html>
Ответ №1:
Просто замените keypress
привязку события на live.
jQuery("#description").live('keypress', function() { ... });
Функция live присоединит обработчик к событию для всех элементов, которые соответствуют текущему селектору, сейчас и в будущем, и в вашем случае description
элемент еще не представлен в DOM.