0

我有一个g:select带有 onchange 事件的事件,它触发了一个调用请求方法的 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 。我的页面在 head 标签上正确呈现了函数的范围。

这是功能:

<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>

任何线索都将受到欢迎。非常感谢!

4

1 回答 1

2

它看起来像updateSubs被定义为一个本地函数,这意味着它不能从全局范围访问。基本上将您的updateSubs函数移出$(document).ready()- 它不需要真正存在,因为您的代码无需等到 dom 准备好后再定义该函数。

e.responseText这应该可以解决您的主要问题,但是当您无法访问名为的变量时,您必须在尝试访问时进一步编辑代码e-这只会引发错误,直到它被修复。我现在已经评论了问题代码。

无论如何,一旦updateSubs在全局范围内,onSuccess处理程序应该能够访问它。

<script type="text/javascript">
    function updateSubs(data, textStatus) {
        alert('call me!!!');
        //var subs = eval("(" + e.responseText + ")");
        //if (subs) {
        //    $("span#saida").html(subs);
        //}
    }
    // I'm not sure if you actually need this ready function..?
    $(document).ready(function() {
        // if you define a function in here it will only be accessible 
        // from within the scope of this function.
    });
</script>

有关函数范围的更多信息,请阅读嵌套函数和闭包

于 2012-08-27T00:52:34.177 回答