ajax重新渲染时获得新值
Getting new value when ajax re-renders
我的代码运行良好,但我真的无法清楚地理解它。
有人能给我解释一下吗。
这是我的代码:
<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>
如果我正确理解你的场景。。
更改
<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
是错误的,因为它可能会随时间的服务器/流量而变化。。。
相关文章:
- $$hashKey在Angular中push()新对象时未生成新值
- text()将保留旧值,但在DOM上显示新值
- Knockout Force在设置新值时通知订阅者可观察到的值
- Javascript / JQuery循环访问已发布的ajax数据字符串以为其分配新值
- 为nouislider设置新值已达到最大数量
- object.create 不使用我的新值
- 在更改选择元素后,在 Javascript 上使用旧值和新值
- 表单不接受新值
- 使用jQuery为属性设置新值
- 如何从javascript散点图中的另一个变量为x和y添加新值
- 根据另一个字段选择获取新值后更新下拉列表内容
- 可以't为我的自动完成框指定新值
- 使用新值更新时出现数组问题
- ajax重新渲染时获得新值
- onClick()从传递给Django模板的函数中获取一个新值
- Grunt为任务设置选项,并使用新值运行该任务
- 比较两个数组,并通过使用 javascript 保留现有对象来更新新值
- 如何使用 Angular.js/javascript 将 JSON 数组值替换为新值
- API 从 angularjs 中保存新值和旧值
- 如何删除文本字段中的默认值并使用 Selenium WebDriver 键入新值