我有一个带有onchange事件的g:select
,它触发一个正在调用请求方法的remoteFunction,但是,回调JS函数没有被调用。
这是g:select:
<g:select id="categories"
name="categories"
from="${Category.findAll('from Category where master is null')}"
noSelection="['':'- Selecione -']" optionKey="id" optionValue="description"
onchange="${remoteFunction(
controller: 'event',
action: 'subCategoriesJSON',
params:'\'id=\' + escape(this.value)',
onSuccess: 'updateSubs(data,textStatus)'
)}"
/>
也会调用 subCategoriesJSON ,但在 updateSubs 函数之后无法进行remoteFunction调用。我的页面正在头标记上正确呈现函数的范围。
这是功能:
<script type="text/javascript">
$(document).ready(function() {
function updateSubs(data, textStatus) {
alert('call me!!!');
var subs = eval("(" + e.responseText + ")");
if (subs) {
$("span#saida").html(subs);
}
}
});
</script>
任何线索都将非常受欢迎。非常感谢!
答案 0 :(得分:2)
看起来updateSubs
被定义为本地函数,这意味着它无法从全局范围访问。基本上将updateSubs
函数移出$(document).ready()
- 它不需要真正存在,因为在定义该函数之前,代码不需要等到dom准备就绪。
这应该可以解决您的主要问题,但是当您无法访问名为e.responseText
的变量时,您将不得不进一步编辑代码{ - 1}} - this只会错误发送错误直到修复。我现在已经对问题代码进行了评论。
无论如何,一旦e
在全局范围内,updateSubs
处理程序就应该能够访问它。
onSuccess
有关功能范围的更多信息,请阅读Nested functions and closures。