2012-08-27 135 views
0

我有一個g:select帶有一個onchange事件,該事件觸發了調用request方法的remoteFunction,但是,回調JS函數並沒有被調用。remoteFunction回調不起作用,不調用js函數

這是G:選擇:

<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被稱爲好,但也沒有辦法remoteFunction後調用的updateSubs功能。我的頁面在頭標上正確地顯示了功能的範圍。

這是函數:

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

任何線索將是非常歡迎的。非常感謝!

回答

2

看起來像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> 

有關功能範圍的更多信息,請閱讀有關Nested functions and closures的更多信息。

+0

感謝這麼多pebbl,它解決了。問題是關於阻止對updateSubs的訪問的初始化jQuery函數。 – Ito

+0

好,很高興我可以幫助:) – Pebbl