我的代码工作正常,但我真的无法清楚地理解它。
有人可以解释一下。
这是我的代码:
<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
然后{{1} }已更改为hiddenValue
,但仍会显示'b'
。
修改的 啊,我发现了一些东西,我改成了:
'a'
答案 0 :(得分:0)
如果我理解你的情景是正确的..
更改您的
<f:ajax event="valueChange" render="hiddenMap " listener="#{myController.changeCategory}"
/>
到
<f:ajax onevent="callThisMethodAfterValueIsUpdated" event="valueChange" render="hiddenMap " listener="#{myController.changeCategory}"
/>
并在你的js中加上这个
var portletNamespace = '#<portlet:namespace/>\\:formId\\:';
function callThisMethodAfterValueIsUpdated(data) {
if (data.status === 'success') {
alert($(portletNamespace+'hiddenValue').val());
}
}
依赖setTimeout
是错误的,因为它可能会不时地因服务器/流量而异......