【发布时间】:2012-07-14 22:10:00
【问题描述】:
我的代码运行良好,但我真的无法清楚地理解它。
谁能解释一下。
这是我的代码:
<script type="text/javascript">
var portletNamespace = '#<portlet:namespace/>\\:formId\\:';
$(portletNamespace + 'drpCategory').live('change', function () {
alert('#{myController.simpleString}');
$(portletNamespace + 'hiddenValue').ready(function () {
alert($(portletNamespace + 'hiddenValue').val());
});
});
</script>
<h:inputText id="hiddenValue" value="#{myController.simpleString}" />
<h:selectOneMenu id="drpCategory">
<f:selectItem itemLabel="Chọn thủ tục" itemValue="#{null}" />
<f:selectItems value="#{myController.listCate}" var="item" itemLabel="#{item.cateNane}"
itemValue="#{item.cateId}" />
<f:ajax event="valueChange" render="hiddenMap " listener="#{myController.changeCategory}"
/>
</h:selectOneMenu>
在我更改drpCategory 中的项目后,javascript 首先警告空字符串,然后警告simpleString 的实际值。但是如果我删除第一个警报代码,第二个将显示旧值(在由 ajax 渲染之前)
例如,如果我删除第一个警报代码。首先,hiddenValue 为空,更改drpCategory 值,hiddenValue 更改为'a' 但javascript 警报为空,第二次更改drpCategory 然后hiddenValue 更改为'b' 但它仍然会显示'a'.
编辑: 啊,我发现了,我改成了:
<script type="text/javascript">
var portletNamespace = '#<portlet:namespace/>\\:formId\\:';
$(portletNamespace+'drpCategory').live('change', function(){
setTimeout('myFunc()', 500);
});
function myFunc(){
$(portletNamespace+'hiddenValue').ready(function(){
alert($(portletNamespace+'hiddenValue').val());
});
}
</script>
【问题讨论】:
标签: javascript jquery ajax jsf-2 liferay