私のコードは正常に機能していますが、実際にははっきりと理解できていません。
誰かが私を説明してもらえますか?
これは私のコードです:
<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
。しかし、最初のアラートコードを削除すると、2番目のアラートコードに古い値が表示されます(ajaxによってレンダリングされる前)
たとえば、最初のアラートコードを削除した場合。最初hiddenValue
は空で、drpCategory
値をhiddenValue
変更します'a'
が、javascriptアラートは空です。2回目に変更すると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>